Xargs
為什麼“top”無法通過“xargs”執行?
我正在嘗試
top
使用-p
選項和xargs
. 但是,top
無法執行並出現錯誤top: failed tty get
:$ pgrep gvfs | paste -s -d ',' | xargs -t top -p top -p 1598,1605,1623,1629,1635,1639,1645,1932,2744 top: failed tty get
我使用
-t
選項xargs
來查看即將執行的完整命令。看起來不錯,我可以手動成功執行它:top -p 1598,1605,1623,1629,1635,1639,1645,1932,2744
但是,它不與
xargs
. 這是為什麼?
事實證明,
--open-tty
對於xargs
互動式應用程序(如top
. 來自man xargs:-o, --open-tty Reopen stdin as /dev/tty in the child process before executing the command. This is useful if you want xargs to run an interactive application.
要執行的命令
top
應該是:pgrep gvfs | paste -s -d ',' | xargs --open-tty top -p
top
是一個互動式程序,例如,您可以鍵入i
以切換顯示空閒程序。雖然它可以安排在實踐中讀取,/dev/tty
但它希望標準輸入連接到終端。對於您的範例,只需使用命令替換而不是
xargs
,例如top -p "$(pgrep gvfs | paste -s -d ',')"
shell 首先執行 pgrep 並粘貼,從這些命令中獲取輸出,然後使用該輸出呼叫 top。