linux - BASH - 从管道中出现的奇怪字符

标签 linux bash awk grep kill

我有这个脚本,它只是杀死一个应用程序

KEY_NAME=/some/path
kill `ps -ef | grep $KEY_NAME | grep -v grep | awk '{ print $2 }'`
exit 0

如果我将kill命令手动编写为oneliner,那么它就可以工作。但我必须将其作为不起作用的脚本运行。所以我尝试调试它,结果如下

[user@server logs]$ bash -x ./script.sh
+ KEY_NAME=/some/path
++ ps -ef
++ grep /some/path
++ grep -v grep
++ awk '{ print $2 }'
+ kill $'20557\r'
: arguments must be process or job IDs
+ exit 0

为什么我总是在 kill 行上看到那些奇怪的字符?我怎样才能摆脱它们?

最佳答案

您收到乱码的原因可能是(我无法验证它,因为我无权访问您的环境)由于子 shell 返回了不止一行。

试试这个:

KEY_NAME=/some/path
for pid in $(ps -ef | grep $KEY_NAME | grep -v grep | awk '{ print $2 }')
  do
    kill $pid
  done
exit 0

关于linux - BASH - 从管道中出现的奇怪字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9990082/

相关文章:

parsing - 如何使用 awk 来分割特定列(使用分隔符),然后添加后缀,然后合并?

linux - HPUX machinfo 相当于 Linux 吗?或我使用什么硬件?

linux - 我们可以在多线程进程的 strace 输出中获取线程的线程 ID 吗?

shell - 在 bash 中删除匹配之前和之后的行(使用 sed 或 awk)?

swift - 如何通过 NSUserUnixTask 传递参数,然后通过脚本访问?

javascript - 用于匹配 unicode 字符的正则表达式,除非在单词末尾使用

linux - shell 脚本中 awk -FS 和 awk -f 的区别

c - 某种事件驱动程序

regex - Grep中 'word'的含义

Bash 子 shell 到文件