2017-04-12 74 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

不客氣! –