linux 命令执行时出现问题

linux 命令执行时出现问题

我正在执行 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

任何像样的编辑器都会为您突出显示语法并帮助您发现任何错误。

相关内容