diff options
author | Tom Ryder <tom@sanctum.geek.nz> | 2017-01-02 16:57:44 +1300 |
---|---|---|
committer | Tom Ryder <tom@sanctum.geek.nz> | 2017-01-02 17:10:10 +1300 |
commit | 8904477c83d589db3e928a6c5a34d542b362de0b (patch) | |
tree | cf641232832feb5f67f630470bc8aa0623882507 /bin | |
parent | Handle simple relative dirs in md() (diff) | |
download | dotfiles-8904477c83d589db3e928a6c5a34d542b362de0b.tar.gz dotfiles-8904477c83d589db3e928a6c5a34d542b362de0b.zip |
Add swr(1df)
Diffstat (limited to 'bin')
-rwxr-xr-x | bin/swr | 65 |
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 "$@" |