如何在 bash 函数中传递第二个参数

如何在 bash 函数中传递第二个参数

假设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\""
}

这不适用于包含 的参数"

相关内容