从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/"
唉,这些都不起作用。我该怎么做?
答案 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