在我的.bashrc我确定,我可以在命令行后使用的功能:
.bashrc
function mycommand() { ssh user@123.456.789.0 cd testdir;./test.sh "$1" }
使用此命令时,仅cd在远程主机上执行该命令。该test.sh命令在本地主机上执行。这是因为分号将两个不同的命令分开:ssh命令和test.sh命令。
cd
test.sh
ssh
我尝试如下定义函数(注意单引号):
function mycommand() { ssh user@123.456.789.0 'cd testdir;./test.sh "$1"' }
我试图将cd命令和test.sh命令放在一起,但是参数$1解析不取决于我给函数的内容。总是试图执行命令
$1
./test.sh $1
在远程主机上。
如何正确定义mycommand,所以剧本test.sh正在改变进入目录后,在远程主机上执行testdir,具有传递给参数的能力mycommand来test.sh?
mycommand
testdir
改为这样:
function mycommand { ssh user@123.456.789.0 "cd testdir;./test.sh \"$1\"" }
您仍然必须将整个命令作为单个字符串传递,但是在该单个字符串中,您需要先进行$1扩展,然后再将其发送到ssh,因此您需要使用""它。
""
实际上,执行此操作的另一种正确方法是使用printf %q正确引用该参数的方法。即使参数中包含空格,单引号,双引号或任何其他可能对shell具特殊含义的字符,这也将使参数的解析变得安全:
printf %q
function mycommand { printf -v __ %q "$1" ssh user@123.456.789.0 "cd testdir;./test.sh $__" }
function
()