为什么使用/“ /”时“ grep”给出错误?

时间:2019-01-25 04:49:57

标签: bash grep

背景

我正在尝试获取使用sh -c执行的命令的PID,并将其存储在变量中以供以后使用。

#!/bin/bash

execute() {
   CMDS="$1"

   # x-terminal-emulator executes the quoted text by executing 'sh -c "$CMDS"'
   # Which is why "ps ax | grep ..." is used to search for the PID that
   # matches "sh -c $CMDS"
   x-terminal-emulator -e "$CMDS" &> /dev/null 

   cmdsPID="$(ps ax | grep \"sh -c "$CMDS"\" | xargs | cut -d ' ' -f 1)"

   echo "$cmdsPID"
}

execute "apt full-upgrade -y"

⚠️错误

但是,执行上述脚本后,它返回:grep: apt full-upgrade -y": No such file or directory,为什么?

1 个答案:

答案 0 :(得分:0)

好的,所以我显然是在考虑一个事实,即我需要转义引号才能起作用。但是,那正是我不应该做的!我只需要不加引号的引号即可。

这是因为,正如@biffen所指出的:

对于错误:由于某种未知的原因,您将引号转义,使之成为非引号,从而将三个参数传递给grep(” sh-c和{ {1}}),告诉它计算文件apt full-upgrade -y"中“ sh的数目,并告诉您找不到该文件。

apt full-upgrade -y"