2017-09-15 119 views
1

我有一個我想分析的命令。但是,此命令在某些情況下會提示是否需要用戶干預(例如,是/否,[繼續]等)。如何在顯示所有輸出的同時捕獲此命令的輸出?如果該命令等待輸入,則看起來命令正在執行時正忙於執行。如何從等待輸入的命令中捕獲命令輸出?

$ program_output=$(command) 
    # Program stalls here performing a `read` but user doesn't see anything 
    # User finally presses [Enter] 
$ 

$ command 
    Warning: Some warning message. Continue? (Y/n) 
    Y #User-input 
    Created http://example/subprogram/id/ 
$ 
+0

難道是確定你的命令的輸出重定向到一個文件?在這種情況下,您可以使用'tee'命令,以便用戶也可以看到輸出並將其存儲到文件中。 –

+0

我需要處理由不同的人同時執行的命令。我應該簡單地獲取進程ID並將其用作文件描述符的一部分嗎? – BLaZuRE

+0

一般來說,最佳做法是程序*不*無條件地從標準輸入提示。例如,大多數操作系統軟件包管理器都可以通過環境變量或命令行參數獲得所有可能提示的答案,從而使這類問題完全沒有意義。 –

回答

0

如果您正在捕獲標準輸出,你可以在stderr上輸出一個消息來提供反饋:

echo -n 'Warning: Some warning message. Continue? (Y/n) ' >&2 
read -r answer 
+0

我不知道期望什麼消息。 '命令'本質上是一個黑匣子。我想動態處理提示,而不是假設。 – BLaZuRE