aboutsummaryrefslogtreecommitdiff
path: root/bin
diff options
context:
space:
mode:
authorTom Ryder <tom@sanctum.geek.nz>2017-01-02 16:57:44 +1300
committerTom Ryder <tom@sanctum.geek.nz>2017-01-02 17:10:10 +1300
commit8904477c83d589db3e928a6c5a34d542b362de0b (patch)
treecf641232832feb5f67f630470bc8aa0623882507 /bin
parentHandle simple relative dirs in md() (diff)
downloaddotfiles-8904477c83d589db3e928a6c5a34d542b362de0b.tar.gz
dotfiles-8904477c83d589db3e928a6c5a34d542b362de0b.zip
Add swr(1df)
Diffstat (limited to 'bin')
-rwxr-xr-xbin/swr65
1 files changed, 65 insertions, 0 deletions
diff --git a/bin/swr b/bin/swr
new file mode 100755
index 00000000..56ab5919
--- /dev/null
+++ b/bin/swr
@@ -0,0 +1,65 @@
+#!/bin/sh
+# Transparently wrap scp(1) targets on the command line
+self=swr
+
+# Create a temporary directory with name in $td, and handle POSIX-ish traps to
+# remove it when the script exits.
+td=
+cleanup() {
+ [ -n "$td" ] && rm -fr -- "$td"
+ if [ "$1" != EXIT ] ; then
+ trap - "$1"
+ kill "-$1" "$$"
+ fi
+}
+for sig in EXIT HUP INT TERM ; do
+ # shellcheck disable=SC2064
+ trap "cleanup $sig" "$sig"
+done
+td=$(mktd "$self") || exit
+
+# Set a flag to manage resetting the positional parameters at the start of the
+# loop
+n=1
+for arg ; do
+
+ # If this is our first iteration, reset the shell parameters
+ case $n in
+ 1) set -- ;;
+ esac
+
+ # Test whether this argument looks like a remote file
+ if (
+
+ # Test it contains a colon
+ case $arg in
+ *:*) ;;
+ *) exit 1 ;;
+ esac
+
+ # Test the part before the first colon has at least one character and
+ # only hostname characters
+ case ${arg%%:*} in
+ '') exit 1 ;;
+ *[!a-zA-Z0-9-.]*) exit 1 ;;
+ esac
+
+ ) ; then
+
+ # Looks like a remote file request; try to copy it into the temporary
+ # directory, bail out completely if we can't
+ dst=$td/$n
+ scp -q -- "$arg" "$dst" || exit
+ set -- "$@" "$dst"
+
+ else
+ # Just a plain old argument; stack it up
+ set -- "$@" "$arg"
+ fi
+
+ # Bump n
+ n=$((n+1))
+done
+
+# Run the command with the processed arguments
+exec "$@"