我尝试了以下命令并收到错误:
$ ssh -q rmthost "bash -c 'cat /var/tmp/5|awk '''{print \$1}''' >/var/tmp/redirect 2>&1'"
Missing }
(注意:" bash -c'是必需的,因为rmthost上帐户的登录shell是csh)
禁用大括号扩展不起作用:
$ set +B
我也尝试过:
$ ssh -q rmthost "bash -c 'cat /var/tmp/5|awk ''''{'print \$1'}''''>/var/tmp/redirect 2>&1'"
awk: syntax error near line 1
awk: illegal statement near line 1
中间脚本文件可以,但我更喜欢单行,因为我需要在不同的时间点运行10个以上类似的命令。
在这种情况下有没有办法逃避括号?
感谢。
答案 0 :(得分:3)
我玩了一会儿...而且我认为你真正想做的就是“简化”。我的本地shell是bash,我的遥控器是tcsh ...这是我提出的功能(根据你的文件名)。
ssh -q rmthost "awk '{ print \$1 }' /var/tmp/5"
Shell逃避是非常棘手的,你真的必须考虑“为什么”你想做这样的事情(例如,在利用中间脚本文件时)。
也许更好的是使用剪切?
ssh -q rmthost 'cut -f1 /var/tmp/5'
如果绝对需要shell封装和重定向......(注意&符号上的转义。)
ssh -q rmthost "sh -c \"awk '{ print $1 }' /var/tmp/5\" \&> /var/tmp/redirect"
答案 1 :(得分:0)
尝试使用heredoc语法(同样,使用cat消除无用):
ssh -q rmthost <<'EOI'
bash -c "awk '{print $1}' < /var/tmp/5 > /var/tmp/redirect 2>&1"
EOI