【发布时间】:2013-09-01 09:57:07
【问题描述】:
在我的.bashrc 中,我定义了一个稍后可以在命令行中使用的函数:
function mycommand() {
ssh user@123.456.789.0 cd testdir;./test.sh "$1"
}
使用该命令时,只在远程主机上执行cd命令; test.sh 命令在本地主机上执行。这是因为分号分隔了两个不同的命令:ssh 命令和test.sh 命令。
我尝试如下定义函数(注意单引号):
function mycommand() {
ssh user@123.456.789.0 'cd testdir;./test.sh "$1"'
}
我试图将cd 命令和test.sh 命令放在一起,但参数$1 没有得到解决,这与我赋予函数的内容无关。总是尝试执行命令
./test.sh $1
在远程主机上。
如何正确定义mycommand,所以脚本test.sh在切换到目录testdir后在远程主机上执行,并能够将mycommand的参数传递给test.sh ?
【问题讨论】:
-
这与要点无关,但您可能希望使用
&&而不是分号来加入远程主机上执行的命令:cd testdir && ./test.sh "$1"。使用该表单(因为在 bash 中评估&&短路),如果cd失败,则不会执行第二个命令,并且您不会无意中在user中运行不同的test.sh主目录。