我通常使用
./aaa.sh 2>&1 | tee -a log
但是找到了一条看起来更容易的新命令:
./aaa.sh &> log
那么我在第二种情况下会放弃什么呢?
苹果和橘子。但首先...
至于2>&1
vs &>
,它们都可以将stderr定向到stdout所指向的相同位置。
但是由于第二个版本不兼容POSIX,因此您放弃了第二个版本的可移植性,并且任何使用它的脚本都只能与支持它的Shell一起使用。
话虽如此,但正如Bash手册页中所述,它们“在语义上是等效的” ...
重定向标准输出和标准错误有两种格式:
&>word and >&word
在两种形式中,第一种是优选的。这在语义上等同于
>word 2>&1
使用第二种形式时,单词可能不会扩展为数字或-。如果是这样,出于兼容性原因,将应用其他重定向操作符(请参阅下面的“复制文件描述符”)。
然而,还有更多。您还将使用tee
向第一个版本添加其他功能的命令。它将使用其stdin输入并将其定向到两个不同的位置:stdout(如果正在以交互方式运行,通常是屏幕/终端)和将附加数据的指定文件(-a
表示附加而不是覆盖)。
将此与第二个版本进行比较,在第二个版本中,组合的stdout和stderr会覆盖log
文件,并且不会在屏幕/终端上显示。
结论:这些真的是两个不同的命令完全的开始,但是,拉伸等价的概念,提到一般来说第一个版本是优越的,因为它是便携式和你看到的输出的好处aaa.sh
,甚至当它被保存到一份文件。当然,如果您不想看到它,或者想要删除以前的文件内容,那就另当别论了。苹果和橘子。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句