例如:
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 *([^.])'"
答案 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'