如何抑制来自 cp 的错误消息?

如何抑制来自 cp 的错误消息?

我目前正在寻找在 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

相关内容