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

and*_*tse 28 shell cp wildcards

我目前正在寻找在 Linux 中抑制错误命令的方法,特别是命令cp.

我愿意:

root@ubuntu:~$ cp /srv/ftp/201*/wha*/*.jj ~/.
cp: cannot stat `/srv/ftp/201*/wha*/*.jj': No such file or directory
Run Code Online (Sandbox Code Playgroud)

如何抑制打印在屏幕上的错误消息?即,我不想在显示器中看到此错误消息。

Joh*_*ohn 58

要抑制 中的错误输出bash,请附加2>/dev/null到命令的末尾。这会将文件句柄 2 (STDERR) 重定向到/dev/null. 其他 shell 中也有类似的构造,但具体构造可能略有不同。

  • 对于那些想要在分配给变量 `var=$(errorcommand 2>/dev/null)` 时抑制错误的人来说,这可能也很有用 /sf/ask/1815205731/ 。 (5认同)

hee*_*ayl 12

将错误消息 (STDERR) 重定向到/dev/null:

root@ubuntu:~$ cp /srv/ftp/201*/wha*/*.jj ~/. 2>/dev/null
Run Code Online (Sandbox Code Playgroud)

例子:

$ 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
Run Code Online (Sandbox Code Playgroud)


Gil*_*il' 5

你的问题不清楚。最明智的做法是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
Run Code Online (Sandbox Code Playgroud)

在普通 sh 中,测试 glob 是否保持不变,指向一个不存在的文件。

set -- /srv/ftp/201*/wha*/*.jj
if ! [ -e "$1" ] && ! [ -L "$1" ]; then
  cp "$@" ~
fi
Run Code Online (Sandbox Code Playgroud)