2013-02-28 259 views
1

例如:参数传递给远程shell在SSH

ssh localhost echo *([^.]) 

要求我extglob通过-O到远程shell的bash像这样:

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

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

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

但是然后bash认为 - 是为自己。

我该如何通过-O extglob来通过ssh打bash?

感谢。

更新:我宁愿不问ssh来问的bash启动另一个庆典:

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

回答

0

更新:由于在评论中提到的extglob将导致语法错误。我已经通过管道命令标准输入管理它:

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

我会远程启动产生额外的外壳。就像这样:

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

虽然没有这个例如需要我会建议你使用ssh参数之后--(如你所提到的):

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

这将防止SSH从解析命令作为参数远程执行。


但你也可以通过选项壳SSH本身开始您使用shopt的bash内建的。请注意,;分隔了这两个命令。

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

你有没有试过任何带有*([^。])的? '''''''''''''''如果是简单的'ls -al',我不需要extglob。 – Jayen 2013-02-28 05:21:41

+0

检查我的更新 – hek2mgl 2013-02-28 05:48:14

+2

如果我要自己运行bash,那么不会更容易'ssh yourserver bash -O extglob -c''echo *([^。])'“' – Jayen 2013-02-28 08:12:00