2013-07-25 63 views
1

對於特定的應用,可能有一個標誌或配置可以設置,例如, git diff --no-pager控制是否有任何程序使用尋呼機(不能使用尋呼機)的標準方法是什麼?

但我不想改變任何默認行爲或任何東西。我只是試圖強制(對於腳本PTY事件的特定實例)輸出以非交互方式出現。

我能想到的兩種方法:

​​......或者...... cat <(command)

這些命令在PTY(具體而言,它們通過script.sh發送到tmux要運行,就像tmux new-window script.sh),這實際上並不像運行腳本(就像它是如何寫入的),而是像實際輸入它一樣。

我假設第一個cat方法實際上是要fork出一個程序並製作一個管道,以便可能慢一點。據我所知,雖然第二種方法做同樣的事情。我怎樣才能避開使用貓?這是一個真正有用的使用cat ??

我想到了兩個辦法:

mkfifo fifo 
command > fifo & 
cat fifo 

好吧,這看起來一個愚蠢的,是長手|

command > file & 
tail -f file 

如何知道文件寫入完成的時間?

rm -f file 
touch file 
tail -f file & 
PID=$! 
command >> file 
kill $PID 

非常迂迴。

還有其他可能的方法嗎?哪一個最好?

回答

3

最好的方法是將cat指定爲$PAGER,以便任何正確編寫的應用程序只是轉儲它們的輸出。

export PAGER=cat 
+0

Oooooh,這是整潔!我想知道是否有任何程序不檢查PAGER,但仍可以去交互化。例如,我知道我實際上可以做像'printf'這樣的東西\ n「| vim -c「:BundleInstall」',使Vim接受一個Enter(用於消除裝載錯誤配置時出現的錯誤消息),這是此答案不包含的某些帶外巧妙的示例。 –

+0

...仍然使用貓。也許我可以避開貓嗎? (因爲否則我只想管它給貓,因爲我覺得有更高的機會會正常工作) –

+1

這些程序期望'$ PAGER'中有東西可以插入;貓是簡單地迴應未經修改的輸入的最方便的選擇。 –