Bash 未绑定变量

Ech*_*est 6 bash

我有一个脚本,里面有这个:

su - jenkins sh -c "ps xu | grep sneakers | grep -v grep | awk '{print $2}' | xargs -r kill"
Run Code Online (Sandbox Code Playgroud)

这是我得到的错误:

line 10: $2: unbound variable
Run Code Online (Sandbox Code Playgroud)

我想我可以通过将其更改set -euset -e脚本的顶部来解决这个问题。但是通过 u 删除我得到了不同类型的错误:

kill: invalid argument c

Usage:
 kill [options] <pid> [...]

Options:
 <pid> [...]            send signal to every <pid> listed
 -<signal>, -s, --signal <signal>
                        specify the <signal> to be sent
 -l, --list=[<signal>]  list all signal names, or convert one to a name
 -L, --table            list all signal names in a nice table

 -h, --help     display this help and exit
 -V, --version  output version information and exit

For more details see kill(1).
Run Code Online (Sandbox Code Playgroud)

我不会在这里用任何参数开始我的脚本,而且 awk 部分也应该是本地的而不是全局的(如果你不知道的话,我不太了解 bash 作用域)。

我该如何解决这个问题?

Kam*_*Cuk 2

我有一个脚本,里面有这个:

blablabl“blabla $2 blabla”

当然 -$2位于双引号内,因此它正在扩展。一样的方法:

echo "$2"
Run Code Online (Sandbox Code Playgroud)

扩大$2。解决方案是避免$2扩张。

sh -c "ps xu | grep sneakers | grep -v grep | awk '{print \$2}' | xargs -r kill"
Run Code Online (Sandbox Code Playgroud)

但整条线都很糟糕。不要ps | grep | grep -v grep- 用于pgrep此目的。要在 Linux 上杀死你可以:

su - jenkins pkill sneakers
Run Code Online (Sandbox Code Playgroud)