假设bash function
我首先连接到远程桌面,然后在连接到远程桌面的命令行时想使用第二个参数(这就是我使用单引号的原因。但是,我我不知道如何围绕这个$2
论点。
my_func () {
ssh blah blah blah $1 'cd $2'
}
我不确定应该如何指定第二个参数。我尝试在本地计算机中运行此函数:
my_func a b
,其中 b 是远程桌面中的目录,但我似乎没有预期的输出。
答案1
您需要$2
以适合远程用户登录 shell 的方式进行引用。例如,假设它是类似 Bourne 的:
shquote() {
LC_ALL=C awk -v q=\' '
BEGIN{
for (i=1; i<ARGC; i++) {
gsub(q, q "\\" q q, ARGV[i])
printf "%s ", q ARGV[i] q
}
print ""
}' "$@"
}
my_func () {
ssh blah blah blah "$1" "cd -- $(shquote "$2")"
}
例如,shquote()
将转换Stephane's dir
为'Stephane'\''s dir'
这样,cd -- 'Stephane'\''s dir'
命令行被远程类似 Bourne 的 shell 解释为cd
使用Stephane's dir
目录参数运行。
无论如何,在远程主机上运行 shell 并cd
不会产生任何有用的效果。
更多阅读内容(以及更多选项,包括远程用户的登录 shell 与 Bourne 不同的情况):如何在不知道远程用户的登录 shell 的情况下通过 ssh 执行任意简单命令?
答案2
my_func () {
ssh blah blah blah $1 'cd $2'
}
不要使用单引号。当你使用单引号时,Bash 变量不会扩展,尝试ssh blah blah blah $1 "cd $2"
一下应该可以。确保将单引号更改为双引号不会使 bash 扩展命令中的其他内容,否则您可能会得到意外的结果。
答案3
关于什么:
my_func() {
blah blah blah blah $1 "cd \"$2\""
}
这不适用于包含 的参数"
。