【发布时间】:2018-10-16 22:48:47
【问题描述】:
将函数的输出传递给tee 命令时,我遇到了一些奇怪的行为。第一个问题是,当从管道传输到tee 的函数调用exit 命令时,我无法退出程序。例如:
myfunction(){
# Some stuff here
exit 1
}
myfunction | tee -a $UPGRADE_LOG
当我运行上述代码时,程序无法退出并运行完成。
我遇到的另一个问题是tee 似乎导致某些代码以这样一种方式运行,以至于顺序顺序被撤消。我有以下输出:
SHOWING SYSTEM-WIDE AND INSTATNCE MEMORY USAGE:
Are you sure you would like to back up the instance given current memory contraints? [y/n]: Filesystem Size Used Avail Use% Mounted on
/dev/mapper/system-root 15G 13G 1.5G 90% /
Log File Size: 24K Total Size to Package: 248K Available Space: 1.5G
什么时候应该运行:
SHOWING SYSTEM-WIDE AND INSTATNCE MEMORY USAGE:
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/system-root 15G 13G 1.5G 90% /
Log File Size: 24K Total Size to Package: 248K Available Space: 1.5G
Are you sure you would like to back up the instance given current memory contraints? [y/n]:
不使用tee 时一切正常。这些问题似乎相互关联。有什么想法为什么会出现这种情况以及我应该怎么做?
【问题讨论】:
-
请不要问多个问题,而是将它们分开。另请注意,如果您尽可能接近 MCVE,则会增加获得好答案的机会:stackoverflow.com/help/mcve
-
这些问题好像和同一个问题有关,所以我把它们放在一起。很抱歉,如果它带来任何混乱。
-
不,代码不会以非顺序方式运行 - 发生的情况是您的 stdout 和 stderr 正在经历不同的进程,因此它们在不同的时间到达。不过,原始写入仍然同时发生。
-
是的,我知道代码是按顺序运行的。我只是指出它表现得如此。我认为这是因为它们是分开运行的,我只是不知道为什么。感谢您的澄清!