2017-04-12 73 views
1

'more'命令为什么在主线程和后台线程上产生不同的输出? 请参见下面的示例:来自后台线程的'more'命令

#!/bin/sh 

test_main() 
{ 
    more input.txt > output_main.txt 
} 

test_back() 
{ 
    more input.txt > output_back.txt 
} 

echo "abc" > input.txt 
test_back & 
test_main 
wait 

output_main.txt:

abc 

output_back.txt:

:::::::::::::: 
input.txt 
:::::::::::::: 
abc 
+0

你为什么要用'more'? –

+0

我不知道为什么,我怀疑答案是“按设计”。然而如果你需要在后台使用更多的东西,你可以像这样使用它:'(cat input.txt | more)> out.txt'并保留与在后台运行它不一样的功能。其实,我没有能力改变剧本。此外,它可以在不同的环境下按预期工作... – rlemon

+0

你可以进入更多关于它工作的环境和不工作的细节吗?听起来像这对发现为什么 – rlemon

回答

1

more的标准输入必须连接到一个终端,以确定的数量一页的行。当您在后台运行more时,stdin不是终端,more以非交互模式运行。

$ more input.txt </dev/tty 
abc 
$ more input.txt </dev/null 
:::::::::::::: 
input.txt 
:::::::::::::: 
abc 
+0

非常感谢! – user3793082

+0

不客气! –