我有这个命令可能会输出错误,所以我使用 隐藏它&>/dev/null
。
现在我想运行此命令,然后运行另一个命令。
这就是我现在所拥有的:
( aaa &>/dev/null ) && bbb
我期望看到:
Command 'bb' not found...
但是我没有看到任何输出。可能是因为第一个命令不存在?如果存在,则第二个命令将运行。
我也尝试使用||
而不是&&
。当第一个命令确实成功时,这不起作用。
如何在一行中实现第一次命令运行成功和不成功的情况?
答案1
您可以使用;
而不是||
或&&
。;
just 分隔命令,并且第二条命令完全不依赖于第一条命令:
$ false; echo yeah
yeah
$ true; echo yeah
yeah
$ false || echo yeah
yeah
$ false && echo yeah
$ true && echo yeah
yeah
$ true || echo yeah
$
此外,使用( command )
意味着command
将在其自己的子 shell 中运行。如果您想在没有子 shell 的情况下对命令进行分组,则可以使用{ command; }
,但在这里您不需要任何这些。您只需执行以下操作:
aaa &>/dev/null ; bbb
它将首先运行aaa
,将输出和错误重定向到/dev/null
,然后运行bbb
。请注意,您不需要&&
或||
的子 shell。您可以直接执行aaa >/dev/null && bbb
,它会做同样的事情。
最后,如果您只想忽略错误消息,那么您可以仅重定向标准错误,而不需要重定向输出:
aaa 2>/dev/null
以下是我所提到内容的一些有用参考: