在同一终端中一次运行多个命令

新手上路,请多包涵

我想运行一些命令,在按下 Ctrl-C 之前每个命令都不会退出。有什么我可以运行一次运行所有它们,并且 Ctrl-C 会退出它们吗?他们可以共享终端输出。

具体来说,我有 compass 编译器、coffeescript 编译器和一个监视文件更改的自定义命令,所有这些命令都在运行监视文件更改。我不想为每个命令加载一个终端。

原文由 Oliver Zheng 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 589
2 个回答

此 bash 脚本适用于 N 个并行线程。每个参数都是一个命令。

trap 将在捕获 SIGINT 时终止所有子进程。

wait $PID_LIST 正在等待每个进程完成。当所有进程都完成后,程序退出。

 #!/bin/bash

for cmd in "$@"; do {
  echo "Process \"$cmd\" started";
  $cmd & pid=$!
  PID_LIST+=" $pid";
} done

trap "kill $PID_LIST" SIGINT

echo "Parallel processes have started";

wait $PID_LIST

echo
echo "All processes have completed";

将此脚本另存为 parallel_commands 并使其可执行。

这是如何使用这个脚本:

 parallel_commands "cmd arg0 arg1 arg2" "other_cmd arg0 arg2 arg3"

例子:

 parallel_commands "sleep 1" "sleep 2" "sleep 3" "sleep 4"

启动 4 个并行睡眠并等待“睡眠 4”完成。

原文由 Alessandro Pezzato 发布,翻译遵循 CC BY-SA 3.0 许可协议

基于@alessandro-pezzato 的评论。在命令之间使用 & 运行多个命令。

例子:

 $ sleep 3 & sleep 5 & sleep 2 &

它将在后台执行命令。

原文由 nsantana 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题