2

例如:

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 *([^.])'"
4

1 回答 1

0

更新:正如评论中提到的,extglob 将导致语法错误。我通过将命令传送到标准输入来管理它:

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 解析命令以作为参数远程执行。


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

ssh yourserver -- 'shopt -s extglob; ls -al'
于 2013-02-28T00:52:05.710 回答