我有一个脚本,里面有这个:
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 -eu为set -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 作用域)。
我该如何解决这个问题?
我有一个脚本,里面有这个:
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)