shell - 防止 POSIX xargs 尝试运行空命令

标签 shell posix kill xargs

我不太擅长 bash,但我正在尝试创建一个脚本来杀死一些 Java 进程:

/usr/ucb/ps -auxww    \
  | grep 'XUnit'      \
  | grep -v 'grep'    \
  | cut -c -2000      \
  | awk '{print $2;}' \
  | xargs kill
cut在这里使用是因为 awk可能会因行过长而失败(请参阅 POSIX specification for awk 中对 LINE_MAX 限制的引用)。

没有此类进程时会出现问题 - xargs尝试运行 kill没有参数,导致错误。

我的 xargs 不接受 -r--no-run-if-empty args,如对 a related question that doesn't specify POSIX compliance 的回答所建议的.

最佳答案

具体解决手头的问题,忽略手头的方法实际上是否是杀死进程的合适方法:

xargs sh -c '[ $# -gt 0 ] && exec "$0" "$@"' kill

这种方法有xargs启动一个 shell,它查看其参数列表的长度(如果只有 kill 被传递,它将为 0,因为 -c 'script' 后面的参数以 $0 开头,不包括在 $# 计数中);如果至少给出了一个参数,该 shell 只会运行给出的命令。

关于shell - 防止 POSIX xargs 尝试运行空命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34440312/

相关文章:

c - pthread_cancel会在线程做IO的时候取消一个线程吗?

C posix套接字,无法将数据从客户端发送到服务器

php - PHP 中 exit() 和 posix_kill(getmypid(), SIGKILL) 的区别

bash - Bash脚本中的Sudo SU无需询问用户密码

bash - 如何从文件名中删除括号中的字符?

postgresql - 使用postgres pg_dump命令时转义包含@的密码

Linux Shell 脚本剪切包含路径的变量的最后一部分

c++ - 如何在 Windows 上以编程方式等效地查询 proc 文件系统?

mysql - 停止 MAMP MySQL

linux - 我想在杀死 -9 <PID> 时将 "<PID> Killed ~"输出到日志文件