Linux 如何抑制命令的错误消息?

Linux 如何抑制命令的错误消息?,linux,bash,Linux,Bash,如何抑制shell命令的错误消息 例如,如果目录中只有jpg文件,则运行ls*.zip会显示错误消息: $ ls *.zip ls: cannot access '*.zip': No such file or directory 是否有抑制此类错误消息的选项?我想在bash脚本中使用此命令,但我想隐藏所有错误。大多数Unix命令,包括ls,都会将常规输出写入stdout,并将错误消息写入stderr,以便在保留常规输出的同时,可以使用此命令丢弃错误消息: ls *.zip 2&g

如何抑制shell命令的错误消息

例如,如果目录中只有
jpg
文件,则运行
ls*.zip
会显示错误消息:

   $ ls *.zip
   ls: cannot access '*.zip': No such file or directory

是否有抑制此类错误消息的选项?我想在bash脚本中使用此命令,但我想隐藏所有错误。

大多数Unix命令,包括
ls
,都会将常规输出写入stdout,并将错误消息写入stderr,以便在保留常规输出的同时,可以使用此命令丢弃错误消息:

ls *.zip 2> /dev/null
将stderr上的任何错误消息发送到/dev/null(即,您不会看到它们)


注意返回值(由
$?
给出)仍将反映发生了错误。

要抑制错误消息并返回退出状态zero append | | true,例如:

$ ls *.zip && echo hello
ls: cannot access *.zip: No such file or directory
$ ls *.zip 2>/dev/null && echo hello
$ ls *.zip 2>/dev/null || true && echo hello
hello

$ touch x.zip
$ ls *.zip 2>/dev/null || true && echo hello
x.zip
hello

如果使用
ls
获取要处理的文件名列表,则可以使用
shopt-s nullglob
使glob变为null。当然,这在ls中非常有效,因为它将返回目录中的所有文件。不过,如果您对*.zip中的文件使用类似于
的内容来抑制错误消息,只需将stderr重定向到
/dev/null
,就像
ls*.zip 2>/dev/null
@chepner Shellcheck for bash建议使用ls而不是grep一样。@KalibZen在哪里?我说的是在读f时避免使用类似于$(ls…
或ls;请执行。谢谢您的快速回答。完美的如果您正在管道传输
ls
的输出,最好将
true |
预先添加到
ls
命令中?@gone No,
true | | ls
将首先运行
true
,对结果感到满意,甚至不考虑运行
ls
$ ls *.zip && echo hello
ls: cannot access *.zip: No such file or directory
$ ls *.zip 2>/dev/null && echo hello
$ ls *.zip 2>/dev/null || true && echo hello
hello

$ touch x.zip
$ ls *.zip 2>/dev/null || true && echo hello
x.zip
hello