通过管道传送到带有标志的命令

通过管道传送到带有标志的命令

我知道以前肯定有人问过这个问题,我不确定到底要搜索什么,所以请原谅重复的问题。

当从前一个命令通过管道输入时,如何将变量“拉入”到正确的位置?我试图找到一个 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不是命令的名称,而是用于启动进程的命令行的一部分,请将标志添加-fpgrep.

如果您获得多次点击,pgrep您可能想要使用-n(获取最近开始的匹配进程)或-o(获取最旧的匹配进程),如果您的pgrep实现支持此操作,或者您可以使用

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

创建以逗号分隔的 PID 列表lsof -p

相关内容