X-Git-Url: http://dolda2000.com/gitweb/?a=blobdiff_plain;f=rsc;h=faa3264a8387d6e639c81be5008d87a7648dd169;hb=338cc72b0326d2aa3aeb08b1fa1c11f2a4b6415f;hp=a84668dfc4b859be08f6d98b22571e8d29a65207;hpb=df4993908ecc42e64d585f34cb95d58ad2d07798;p=utils.git diff --git a/rsc b/rsc index a84668d..faa3264 100755 --- a/rsc +++ b/rsc @@ -1,41 +1,18 @@ -#!/usr/bin/perl +#!/bin/bash -if(@ARGV < 1) { - print STDERR "usage: rsc HOST CMD ARG...\n"; - exit 1; -} +set -e -if($ARGV[0] eq "-s") { - $c = ""; - while() { - chomp; - s/\\(.)/$1/g; - $c .= $_; - if(/\\$/) { - $c =~ s/\\$/\n/; - next; - } - push @a, $c; - $c = ""; - } - for (@a) { - exec @a; - print STDERR "$a[0]: $!\n"; - exit 1; - } -} else { - $host = shift @ARGV; - $pid = open SSH, "|-"; - if($pid == 0) { - exec "ssh", "$host", "rsc", "-s"; - die "$!"; - } - for (@ARGV) { - s/([\\\n])/\\$1/g; - print SSH "$_\n"; - } - close SSH; - waitpid $pid, 0; -} +if [ $# -lt 2 ]; then + echo "usage: rsc HOST COMMAND ARGS..." >&2 + exit 1 +fi +host="$1"; shift +cmd="$1"; shift +( + echo -n "$cmd"; echo -ne '\0' + for arg in "$@"; do + echo -n "$arg"; echo -ne '\0' + done +) | exec ssh "$host" "xargs -0x sh -c 'exec \$0 \"\$@\"'"