Answers:
myparameter=foobar
ssh user@server "myscript $myparameter"
这将myscript foobar
在服务器上执行。
~/.elm/aliases
。)
"
)而不是单引号('
)很重要。使用double意味着本地计算机上的shell将扩展变量,然后执行ssh
命令。如果要使用单个命令,则本地shell不会触摸该命令,该命令是逐字发送的,但仍会在远程shell中进行扩展。
$myparameter
包含空格,它将在服务器端拆分。bash的printf
有一个%q
格式,你可以使用。我有一些示例代码,但是这里不适合。我将为此创建一个新答案。
(这是我对已接受答案的评论的后续内容。)
请注意,如果$myparameter
包含空格,它将在服务器端拆分。Bash的printf具有%q
可以使用的格式。例:
$ myparameter='hello; rm somefile'
$ ssh user@server "echo $myparameter"
hello
rm: cannot remove `somefile': No such file or directory
$ ssh user@server "echo $(printf '%q' "$myparameter")"
hello; rm somefile
如果它是安全的假设,$myparameter
将不包含单引号(否则看到这里,或者使用printf '%q' ...
通过janmoesen溶液),你可以把单引号括起来$myparameter
,以避免在服务器侧的剖分式空间的问题。
myparameter="foo \" bar"
#myparameter="foo \" ' bar"
ssh localhost "set -xv; printf '%s\n' myscript '${myparameter}'"
ssh localhost "set -xv; echo $(set -xv; printf '%q' "$myparameter")"