如何在远程主机上的特定(但可变)目录中从本地计算机执行脚本?

时间:2011-04-05 01:13:34

标签: bash ssh

previous question,我发现可以使用以下命令在远程主机上运行本地脚本:

ssh -T remotehost < localscript.sh

现在,我需要允许其他人指定在远程主机上运行脚本的目录。

我尝试过诸如

之类的命令
 ssh -T remotehost "cd /path/to/dir" < localscript.sh
 ssh -T remotehost:/path/to/dir < localscript.sh

我甚至尝试将DIR=$1; cd $DIR添加到脚本并使用

 ssh -T remotehost < localscript.sh "/path/to/dir/"
唉,这些都不起作用。我该怎么做?

2 个答案:

答案 0 :(得分:3)

echo 'cd /path/to/dir' | cat - localscript.sh | ssh -T remotehost

请注意,如果您正在为复杂的事情做这件事,那么仔细考虑如何处理远程系统中的错误是非常非常重要的。只要星星对齐,编写可以正常工作的代码就非常容易。更难 - 通常是非常必要的 - 是编写代码,如果因任何原因内容中断,它将提供有用的调试消息。

您也可以查看古老的工具http://en.wikipedia.org/wiki/Expect。它通常用于远程计算机上的脚本编写。 (是的,错误处理是一个长期维护问题。)

答案 1 :(得分:1)

另外两种更改远程主机上目录的方法(可变):

echo '#!/bin/bash
cd "$1" || exit 1
pwd -P
shift
printf "%s\n" "$@" | cat -n
exit
' > localscript.sh

ssh localhost 'bash -s "$@"' <localscript.sh '/tmp' 2 3 4 5 
ssh localhost 'source /dev/stdin "$@"' <localscript.sh '/tmp' 2 3 4 5 

# make sure it's the bash shell to source & execute the commands
#ssh -T localhost 'bash -c '\''source /dev/stdin "$@"'\''' _ <localscript.sh '/tmp' 2 3 4 5