diff --git a/scripts/upload.sh b/scripts/upload.sh index 6f3532cd..84240acf 100644 --- a/scripts/upload.sh +++ b/scripts/upload.sh @@ -93,6 +93,8 @@ cat << EOT -c variable : show contents of variable valid variables are login, method, passwd, file_owner, file_group, file_mode, dir_mode, source, target_file + -p : parse command line into variables, show results and exit if -x switch is active + -x : exit after informational commands EOT [ -n "$1" ] && exit $1 @@ -146,9 +148,9 @@ parse_target() test -n "$FILE_GROUP" && echo file_group="\"$FILE_GROUP\";" if is_dir "$target_file" ; then - echo target_path=\"$TARGET_FILE\" # TODO: this is bullshit - else echo target_path=\"$TARGET_FILE/`basename $source`\" # TODO: this is bullshit + else + echo target_path=\"$TARGET_FILE\" # TODO: this is bullshit fi echo "PARSE_TARGET=\"OK\";" @@ -211,16 +213,20 @@ EOT # -- here we go # -- command line arguments -set -- `getopt 'hvc:' $*` +set -- `getopt 'hvc:px' $*` while [ "$1" != -- ]; do case $1 in - h) + -h) usage 0;; - v) + -v) VERBOSE=1;; - c) + -c) VARIABLE=$2 shift;; + -p) + PARSE=1;; + -x) + EXIT=1;; *) usage 1;; esac @@ -264,7 +270,7 @@ done # -- real run if [ -n "$VARIABLE" ]; then eval `parse_target` - case "$VARABLE" in + case "$VARIABLE" in login) echo $login;; method) echo $method;; passwd) echo $passwd;; @@ -278,7 +284,18 @@ if [ -n "$VARIABLE" ]; then echo Unknown variable \"$VARIABLE\". Exiting. >&2 exit 1; esac - exit 0 + test "$EXIT" = 1 && exit 0 +fi + +if [ "$PARSE" = 1 ]; then + + eval `parse_target` + + for var in login method passwd file_owner file_group file_mode dir_mode source target_file ; do + + eval echo $var = \$$var + done + test "$EXIT" = 1 && exit 0 fi for t in $*; do @@ -287,8 +304,8 @@ for t in $*; do rsync_ssh) ssh_mkdir $target_file $file_owner $file_group $dir_mode || break /usr/bin/rsync -az --links -e "/usr/bin/ssh -l $login $IDENTITY" $source $login@$host:$target_file - ssh_chown $target_file $file_owner $file_group - ssh_chmod $target_file $file_mode $dir_mode + ssh_chown $target_path $file_owner $file_group + ssh_chmod $target_path $file_mode $dir_mode ;; *) echo "Internal error: \"$method\" is not implemented." >&2