我正在尝试获取使用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
,为什么?
答案 0 :(得分:0)
好的,所以我显然是在考虑一个事实,即我需要转义引号才能起作用。但是,那正是我不应该做的!我只需要不加引号的引号即可。
这是因为,正如@biffen所指出的:
“ 对于错误:由于某种未知的原因,您将引号转义,使之成为非引号,从而将三个参数传递给grep(” sh
,-c
和{ {1}}),告诉它计算文件apt full-upgrade -y"
中“ sh
的数目,并告诉您找不到该文件。”
apt full-upgrade -y"