Przeglądaj źródła

add more sharxz options

Tobias Simetsreiter 4 lat temu
rodzic
commit
4da8b34dd4
2 zmienionych plików z 24 dodań i 16 usunięć
  1. 24 11
      sharxz
  2. 0 5
      sshar

+ 24 - 11
sharxz

@@ -6,7 +6,7 @@ sharxz(){
     CMD=""
     OUTPUT="-"
     DEBUG=false
-    NO_PARSE=false
+    PARSE=false
     while getopts ":dT:o:C:x:n" opt; do
         case $opt in
             d )
@@ -24,8 +24,8 @@ sharxz(){
             x )
                 CMD="$OPTARG"
               ;;
-            n )
-                NO_PARSE=true
+            p )
+                PARSE=true
               ;;
             \? ) echo "Usage: sharxz [-T TAR_OPTIONS] [-C chdir]" 1>&2
               ;;
@@ -38,22 +38,28 @@ sharxz(){
     [ "$OUTPUT" == "-" ] && OUTPUT="/dev/stdout"
     INFILE=$1
 
+    [ "$CHDIR" == "" ] && [ -d "$INFILE" ] &&
+        CHDIR="$INFILE"
     [ "$CHDIR" == "" ] &&
         CHDIR="$(dirname $INFILE)"
 
     [ ! -f "$INFILE" ] &&
-        [ ! -d "$CHDIR"] && echo "Error: $INFILE is not a file, and $CHDIR is not a directory" 1>&2 && exit 1
+        [ ! -d "$CHDIR" ] && echo "Error: $INFILE is not a file, and $CHDIR is not a directory" 1>&2 && exit 1
 
     [ -z "$CMD" ] &&
         CMD="./$(realpath "--relative-to=$CHDIR" "$INFILE")"
 
     $DEBUG && echo "CMD: $CMD" 1>&2
 
-    cd "$CHDIR"
+    {
+        cd "$CHDIR"
 
-    $NO_PARSE || parse_options
+        $DEBUG && du -sh . 1>&2
 
-    print_shar "$INFILE" > "$OUTPUT"
+        $PARSE || parse_options
+
+        print_shar "$INFILE"
+    } > "$OUTPUT"
 
 }
 
@@ -72,9 +78,8 @@ print_shar(){
     printf -- "#!/usr/bin/env bash\n\nDEBUG=$DEBUG\n"
     printf -- "$UNSHAR\n"
     $DEBUG && pwd 1>&2
-    $DEBUG && ls ** 1>&2
     $DEBUG && set -x
-    tar -c ${TAR_OPTIONS[@]} ./| xz -c -3 -T 0 | base64 -w 0
+    tar -c ${TAR_OPTIONS[@]} .| xz -c -3 -T 0 | base64 -w 0
     $DEBUG && set +x
     printf -- "\n$SETUPSHAR\n"
 
@@ -99,10 +104,17 @@ read -r -d '' UNSHAR <<'UNSHAREOF'
 set -e
 $DEBUG && set -x
 
-FIFO_NAME=$(mktemp -u)
+cleanup(){
+    rm -f "$FIFO_NAME"
+    rm -r "$TMPDIR"
+    exit 127
+}
+
+FIFO_NAME=$(mktemp -u).fifo
 mkfifo "$FIFO_NAME"
 TMPDIR=$(mktemp -d)
 
+trap cleanup SIGINT
 cat $FIFO_NAME|base64 -d |xz -d -T 0 |tar -xC $TMPDIR &
 
 cat <<SAFEPAYLOADEOF > "$FIFO_NAME"
@@ -115,12 +127,13 @@ wait
 rm "$FIFO_NAME"
 cd $TMPDIR
 set +e
+$DEBUG && pwd 1>&2
 
 SETUPSHAREOF
 
 read -r -d '' CLEANUPSHAR <<'CLEANUPSHAREOF'
 EXITCODE=$?
-rm -r $TMPDIR
+cleanup
 exit $EXITCODE
 
 CLEANUPSHAREOF

+ 0 - 5
sshar

@@ -11,9 +11,6 @@ sshar(){
             S )
                 SHARXZ="$OPTARG"
               ;;
-            C )
-                CMD="$OPTARG"
-              ;;
             \? ) echo "Usage: sshar [-e SSH_SHELL] [-S SHARXZ_CMD]"
               ;;
             : )
@@ -27,8 +24,6 @@ sshar(){
     local INFILE="$2"
     shift 2
 
-    [ ! -f "$INFILE" ] && echo "Error: $INFILE is not a file" && exit 1
-
     source $LIBDIR/sharxz
 
     $SHARXZ "$INFILE" | "$SSH" "$REMOTE" bash /dev/stdin "$@"