使用 bash 我可以运行:
$ ssh bashuser@localhost '( ls -d / nosuchfile ) & echo foo; wait'
foo
ls: cannot access nosuchfile: No such file or directory
/
如果我尝试使用 csh 进行同样的操作,我会得到:
$ ssh cshuser@localhost '( ls -d / nosuchfile ) & echo foo; wait'
[1] 187253
foo
ls: cannot access nosuchfile: No such file or directory
/
[1] Exit 2 ( ls -d / nosuchfile )
我想得到与 bash 相同的输出。如何避免[1] PID
和[1] Exit ...
?我可以以某种方式进入csh
安静模式吗?
和ls
当然echo foo
只是示例。实际上,它们会复杂得多,并且取决于在登录 shell 下运行,我将需要 stdout 和 stderr,因此简单的grep -v
输出将不起作用。
答案1
看起来如果没有一些魔术就无法做到(即没有选择)。不过,您可以使用sh -c
:
$ ssh cshuser@localhost 'sh -c "( ls -d / nosuchfile ) & echo foo; wait"'
foo
ls: nosuchfile: No such file or directory
/
bash
恕我直言,无论如何,这是最好的选择,因为 shell 比&更多csh
(例如fish
),并且您无法保证它们中的任何一个的行为......