LS命令响应:垃圾选项

时间:2018-06-14 11:45:28

标签: bash

我正在尝试编写一个脚本,我需要获取程序进程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).

2 个答案:

答案 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 pips -u命令的'pi'参数。我们正在使用awk '{print $2}'打印2个元素,即pid。

它将返回名称包含脚本bot.py的进程的pid,并将其分配给var。