我知道以前肯定有人问过这个问题,我不确定到底要搜索什么,所以请原谅重复的问题。
当从前一个命令通过管道输入时,如何将变量“拉入”到正确的位置?我试图找到一个 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}''
(再次请原谅不正确的反引号),我该如何做我想做的事情?
答案1
该lsof
实用程序需要命令行上的 PID,而不是其标准输入上的 PID。
您可以使用
lsof -p "$( pgrep IINA )"
这将作为其参数执行pgrep
,并且其输出将作为选项参数IINA
传递给使用命令替换的选项。lsof
-p
如果IINA
不是命令的名称,而是用于启动进程的命令行的一部分,请将标志添加-f
到pgrep
.
如果您获得多次点击,pgrep
您可能想要使用-n
(获取最近开始的匹配进程)或-o
(获取最旧的匹配进程),如果您的pgrep
实现支持此操作,或者您可以使用
lsof -p "$( pgrep IINA | tr '\n' ',' )"
创建以逗号分隔的 PID 列表lsof -p
。