我正在执行 Linux 命令并从自动脚本执行。
ps | awk '/dspload -d 1 -e/&&!/awk/{print $1}'
现在,当我查看脚本的日志并查看其执行的位置时,我看到类似这样的内容
root@dm365-evm:/usr/share/ti/dvtb# ps | awk '/dspload -d 1 -e/&&!/awk/{print $1}'
这导致命令无法正常运行。
有人可以建议我如何运行它吗:
root@dm365-evm:/usr/share/ti/dvtb# ps | awk '/dspload -d 1 -e/&&!/awk/{print $1}'
答案1
鉴于问题后的评论,您确定用于编写脚本的文本编辑器没有在命令中添加换行符(自动换行)吗?即,您的脚本文件是否在参数中包含换行符awk
?
答案2
您可能必须转义美元符号,例如 \$1。
答案3
我不确定为什么将其从 StackOverflow 迁移过来,因为这里的问题和那里一样不清楚。
它看起来dspload -d 1 -e
就像您试图获取与“ ”匹配但排除的所有正在运行的进程的 PID 列表awk
(您使用它来过滤输出ps
并只抓取第一列)。
它也是看起来就像你的命令一样,ps | awk '/dspload -d 1 -e/&&!/awk/{print $1}'
它从命令行运行。无论你运行的是哪个操作系统,无论你运行的是哪个 shell。我怀疑输出结果如下:
23875
23874
1368
23873
我猜想,与其尝试记住这个复杂的命令行,不如将其放入某种文件中,并尝试将其作为 shell 脚本运行,但这样做行不通。我不知道这个 shell 脚本是什么样子的。
我可以告诉你,如果你的 shell 脚本如下所示:
#!/bin/sh
ps | awk '/dspload -d 1 -e/&&!/awk/{print $1}'
然后运行它将提供与在 Mac OS X 上的 bash 提示符下运行该命令相同的输出。
如果你已经将流程提取到变量中,则需要确保在调用中扩展该变量awk
,即:
#!/bin/sh
process="dspload -d 1 -e"
ps | awk '/'${process}'/&&!/awk/{print $1}'
使用单引号 ( '
) 意味着$1
,它在 Bourne Shell 中具有特殊含义,将不会被扩展(但会被 解释)awk
。
任何像样的编辑器都会为您突出显示语法并帮助您发现任何错误。