我正在尝试编写一个脚本,我需要获取程序进程ID,
$ var=$"ps -u pi | grep bot.py | awk '{print $1}' | head -n 1"
但不是我得到了:
**error: user name does not exist**
Usage:
ps [options]
Try 'ps --help <simple|list|output|threads|misc|all>
or 'ps --help <s|l|o|t|m|a>'
for additional help text.
For more details see ps(1).
答案 0 :(得分:1)
如果遇到这种问题,请依次尝试管道的每个部分(因此请尝试“ps -upi”命令,然后执行“ps -upi | grep bot.py”,直到找到失败的步骤。
我假设“bot”用户正在运行“bot.py”,你可能正在以另一个用户身份运行它(前一个答案中的“ps -u”将返回运行该用户的用户运行的进程命令,以一种美化的格式)。
另外,你应该将命令括在括号中,而不是引号,并且你不需要一系列grep,awk,head等,只需使用awk。你最终得到了
$ var=$(ps -u pi | awk '/bot\.py/{print $1; exit}')
编辑:我错过了尾随括号和“。”在bot.py中会出现任何字符 - 将其转义为匹配真正的点。
答案 1 :(得分:0)
使用以下更新的脚本代码: -
$ var=$"ps -u | grep bot.py | awk '{print $2}' | head -n 1"
这里我们删除了从ps -u pi
到ps -u
命令的'pi'参数。我们正在使用awk '{print $2}'
打印2个元素,即pid。
它将返回名称包含脚本bot.py的进程的pid,并将其分配给var。