我目前正在寻找在 Linux 中抑制错误命令的方法,特别是命令cp
.
我愿意:
root@ubuntu:~$ cp /srv/ftp/201*/wha*/*.jj ~/.
cp: cannot stat `/srv/ftp/201*/wha*/*.jj': No such file or directory
如何抑制出现的错误消息打印屏幕上?即,我不想在显示器中看到此错误消息。
答案1
要抑制 中的错误输出bash
,请附加2>/dev/null
到命令末尾。这会将文件句柄 2 (STDERR) 重定向到/dev/null
.其他 shell 中也有类似的构造,但具体构造可能略有不同。
答案2
将错误消息 (STDERR) 重定向到/dev/null
:
root@ubuntu:~$ cp /srv/ftp/201*/wha*/*.jj ~/. 2>/dev/null
例子:
$ cp /srv/ftp/201*/wha*/*.jj ~/. ##Error message gets printed
cp: cannot stat ‘/srv/ftp/201*/wha*/*.jj’: No such file or directory
$ cp /srv/ftp/201*/wha*/*.jj ~/. 2>/dev/null ##No error message gets printed
答案3
你的问题不清楚。最明智的做法是cp
当通配符与任何文件都不匹配时根本不运行,而不是运行cp
并隐藏错误消息。
为此,如果 shell 是 bash,请设置nullglob
选项这样,如果通配符模式不匹配任何文件,它就会扩展为空。然后检查模式是否扩展到任何内容,cp
在这种情况下不要调用。
#!/bin/bash
shopt -s nullglob
files=(/srv/ftp/201*/wha*/*.jj)
if [[ ${#files[@]} -ne 0 ]]; then
cp "${files[@]}" ~
fi
在普通 sh 中,测试 glob 是否保持不变,指向一个不存在的文件。
set -- /srv/ftp/201*/wha*/*.jj
if ! [ -e "$1" ] && ! [ -L "$1" ]; then
cp "$@" ~
fi
答案4
在 ~/.bashrc 中添加以下内容:
alias cp='cp 2> /dev/null'
然后:
source ~/.bashrc