首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Bash无界变量

Bash无界变量
EN

Stack Overflow用户
提问于 2020-10-09 12:33:09
回答 2查看 7.3K关注 0票数 5

我有个剧本里面有这个:

代码语言:javascript
复制
su - jenkins sh -c "ps xu | grep sneakers | grep -v grep | awk '{print $2}' | xargs -r kill"

这是我得到的错误:

代码语言:javascript
复制
line 10: $2: unbound variable

我认为我可以通过在脚本顶部将这个set -eu更改为set -e来解决这个问题。但是移除u,我得到了不同类型的错误:

代码语言:javascript
复制
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).

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

我该如何解决这个问题?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-10-09 12:45:00

我有一个脚本,里面有这样的内容:

blabalabl "blabla $2 blabla“

当然-- $2在双引号内,所以它正在被扩展。同样的方式:

代码语言:javascript
复制
echo "$2"

扩展$2。解决方案是避免$2扩展。

代码语言:javascript
复制
sh -c "ps xu | grep sneakers | grep -v grep | awk '{print \$2}' | xargs -r kill"

但整条线路都很糟糕。不要使用ps | grep | grep -v grep --为此使用pgrep。要在linux上杀人,您可以只需:

代码语言:javascript
复制
su - jenkins pkill sneakers
票数 2
EN

Stack Overflow用户

发布于 2020-10-09 12:44:40

我建议您使用pkill -f sneakers命令。

代码语言:javascript
复制
su - jenkins sh -c "pkill -f sneakers"

它既干净又干净。如果失败,添加-9信号。

代码语言:javascript
复制
su - jenkins sh -c "pkill -9 -f sneakers"
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64280144

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档