将命令输出的错误消息存储到shell变量中



我试图将复制命令的错误meesage存储到变量中。但是它没有发生

unix命令

log=`cp log.txt`
cp: missing destination file operand after `log.txt'
Try `cp --help' for more information.
echo $log
<nothing displayed>

我想将上述错误消息存储到变量中,以便我可以随时回声

只需将Stdout(正常输出)重定向到/dev/null并保持stderror:

a=$(cp log.txt 2>&1 >/dev/null)

请参阅一个示例:

$ a=$(cp log.txt 2>&1 >/dev/null)
$ echo "$a"
cp: missing destination file operand after ‘log.txt’
Try 'cp --help' for more information.

>/dev/null的重要性是在这种情况下不需要远离正常输出:

$ ls a b
ls: cannot access a: No such file or directory
b
$ a=$(ls a b 2>&1)
$ echo "$a"
ls: cannot access a: No such file or directory
b
$ a=$(ls a b 2>&1 >/dev/null)
$ echo "$a"
ls: cannot access a: No such file or directory

请注意,调用$a的需要,以保留格式。另外,最好使用$()而不是, as it is easier to nest and also


2>&1是什么意思?

1是Stdout。2是stderr。

这是记住这种结构的一种方法(Altough并非完全 准确):起初,2>1看起来像是重定向stderr的好方法 要stdout。但是,它实际上将被解释为"重定向 stderr到名为 1"的文件。&表示下面的是文件 描述符,而不是文件名。因此构造变为: 2>&1

相关内容

  • 没有找到相关文章

最新更新