如何在 shell 命令中抑制错误信息?
例如,如果一个目录中只有 jpg
文件,运行 ls *.zip
将会产生一个错误信息:
$ ls *.zip
ls: cannot access '*.zip': No such file or directory
有没有选项可以抑制这样的错误消息?我想在Bash脚本中使用这个命令,但我想隐藏所有错误。
大多数Unix命令,包括ls
,会将常规输出写入标准输出(stdout)中,将错误信息写入标准错误(stderr)中,因此您可以使用Bash重定向来丢弃错误消息,同时保留常规输出:
ls *.zip 2> /dev/null
zsh: no matches found: *.zip
。不过,在bash中是可以正常运行的。 - undefined$ ls *.zip 2>/dev/null
将标准错误(stderr)的所有错误信息重定向到/dev/null中(也就是说,您不会看到这些错误信息)。
请注意,返回值(由$?
给出)仍将反映发生了错误。
为了阻止出现错误信息,并且返回退出状态0,请添加|| 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
的输出进行管道传输,那么在 ls
命令前加上 true ||
可能会更好? - gonetrue || ls
会先运行true
,得出结果后满意并且不会考虑运行ls
。 - Hagen von Eitzen我尝试运行 ls -R [已存在的文件],但立即出现错误。
ls: 无法访问 'existing file': 没有那个文件或目录
因此,我使用了以下命令:
ls -R 2>dev/null | grep -i [已存在的文件]*
ls -R 2>dev/null | grep -i text*
或者,在你的情况下:
ls -R 2>dev/null | grep -i *.zip
我的解决方案是使用带有Buster的树莓派3。
ls -R 2>/dev/null | grep -i [existing file]*
在Bash脚本中,2>/dev/null非常有用,可以避免无用的警告或错误。
不要忘记斜杠字符。
ls
来获取要处理的文件名列表,不要这样做。 - chepnershopt -s nullglob
使 glob 变为空。当然,这对于 ls 来说非常有效,因为它会返回目录中的所有文件。但是如果你使用类似for file in *.zip
的东西,它也能工作。 - user000001/dev/null
,例如ls *.zip 2>/dev/null
。 - Luis Coloradofor f in $(ls ...)或者
ls | while read f; do`。 - chepnerab=$(ls input.txt/*findMystring*)
并循环$ab
,但不建议使用以下方式:ls input.txt | grep 'mystring'
https://github.com/koalaman/shellcheck/wiki/SC2010 - Kalib Zen