将参数传递给ssh中的远程shell

时间:2013-02-28 00:46:50

标签: bash ssh

例如:

ssh localhost echo *([^.])

要求我将-O extglob传递给远程shell bash,如下所示:

ssh localhost -O extglob echo *([^.])

然而,ssh认为-O是为了自己,所以我再试一次:

ssh localhost -- -O extglob echo *([^.])

然后bash认为 - 就是为了自己。

如何通过ssh将-O extglob传递给bash?

感谢。

更新:我宁愿不要求ssh要求bash启动另一个bash:

ssh yourserver bash -O extglob -c "'echo *([^.])'"

1 个答案:

答案 0 :(得分:0)

更新:正如评论中所提到的,extglob会导致语法错误。我通过将命令传递给stdin来管理它:

ssh yourserver -- bash -O extglob <<'EOF'
echo *([^.])
EOF

我会远程启动一个额外的shell。像这样:

ssh yourserver bash -O extglob -c 'ls -al'

虽然这个示例中不需要它,但我建议你在ssh参数之后使用--(正如你所提到的):

ssh yourserver -- bash -O extglob -c 'ls -al'

这将阻止ssh解析命令以作为参数远程执行。


但是您也可以将选项传递给shell,ssh本身就是使用shopt bash builtin开始的。请注意,;将两个命令分开。

ssh yourserver -- 'shopt -s extglob; ls -al'