Linux

管道到帶有標誌的命令

  • April 14, 2018

我知道這一定是以前問過的,我不確定要準確搜尋什麼,所以請原諒重複的問題。

當從上一個命令通過管道輸入時,如何將變數“拉入”到正確的位置?我試圖找到一個 PID,然後找到與該 PID 相關的打開文件,然後將其縮小到一個文件,然後對該文件執行命令。這是命令:

ps x | grep IINA | grep -v grep | awk '{print $1}'

好的,這給了我一個 PID,太好了。現在我想要lsof -p那個 PID,但我不能簡單地做ps x | grep IINA | grep -v grep | awk '{print $1}' | lsof -p.

如果不做ps x | grep IINA | grep -v grep | lsof -p 'awk '{print $1}''(再次,請原諒不正確的反引號),我該如何做我想做的事情?

lsof實用程序需要命令行上的 PID,而不是其標準輸入。

您可以使用

lsof -p "$( pgrep IINA )"

這將作為其參數執行pgrepIINA並且其輸出將lsof作為選項參數傳遞給-p使用命令替換的選項。

如果IINA不是命令的名稱,而是用於啟動程序的命令行的一部分,則將-f標誌添加到pgrep.

如果您獲得多次點擊,pgrep您可能希望使用-n(獲取最近開始的匹配過程)或-o(獲取最舊的匹配過程),如果您的pgrep實現支持這一點,或者您可以使用

lsof -p "$( pgrep IINA | tr '\n' ',' )"

lsof -p.

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