管道 3 终端命令

管道 3 终端命令

我有一个任务,要停止一个正在运行的进程,然后使用之前运行的相同命令再次运行它。

简而言之,我需要更改正在运行的程序的配置并重新启动它以应用更改。

我有一个 program.pid 文件,应用程序在其中存储其 PID。ps我的设置中的程序没有-p或类似的标志。

我想要做的是ps | grep通过我获得的 PID more program.pid

问题是如何将第二条命令的结果放入第一条命令中作为第二个参数grep

答案1

大多数 shell 支持$(command)`command`使用命令的输出作为变量。至少在 Bash 中,还有一种快捷方式$(<file)可以读取文件的内容,而无需调用任何子命令。

grep "$(cat program.pid)"
pid=$(cat program.pid)
grep "$pid"
grep "$(< program.pid)"

但是,有一种更直接的方法可以在不使用的情况下读取 Linux 上的命令行ps- 您可以从中读取/proc/<pid>/cmdline。虚拟文件包含 NUL 分隔的参数,可以使用例如 Bash 的mapfile函数读取:

mapfile -d "" args < /proc/$pid/cmdline

现在args包含单独的命令行参数数组,您可以将其用作:

myprogram "${args[@]}"

相关内容