Xargs

為什麼“top”無法通過“xargs”執行?

  • January 17, 2022

我正在嘗試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。

引用自:https://unix.stackexchange.com/questions/686502