如何通过ssh使用参数执行远程命令?
在我的.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不解决,独立于我给的function。 总是试图执行一个命令 
 ./test.sh $1 
在远程主机上。
 如何正确定义mycommand ,所以脚本test.sh在更改到testdir目录后在远程主机上执行,并且能够将给mycommand的参数mycommand给test.sh ? 
这样做,而不是:
 function mycommand { ssh user@123.456.789.0 "cd testdir;./test.sh \"$1\"" } 
 您仍然需要将整个命令作为单个string传递,但是在这个单个string中,您需要先将$1展开,然后才能将其发送到ssh,因此您需要使用""作为它。 
更新
 另一个正确的方法是使用printf %q正确地引用参数。 这将使参数安全地parsing,即使它有空格,单引号,双引号或任何其他可能对shell有特殊含义的字符: 
 function mycommand { printf -v __ %q "$1" ssh user@123.456.789.0 "cd testdir;./test.sh $__" } 
-  当用function声明函数时,()不是必需的。
- 不要仅仅因为你是POSIXist就评论这件事。
振兴旧的线程,但这个相当干净的方法没有列出。
 function mycommand() { ssh user@123.456.789.0 <<+ cd testdir;./test.sh "$1" + }