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

标签 linux bash

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

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

最佳答案

此 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 并行 sleep 并等待“ sleep 4”完成。

关于linux - 在同一终端中一次运行多个命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10909685/

相关文章:

linux - makefile 编译 - make : Nothing to be done for 'all'

c - 如何直接写入超过 4GB 数据的 U 盘?

MySQL 首选项 Pane 和登录错误

bash - 在新的 bash 中更改 bash 提示符

Linux bash 命令错误地处理输出中的零。

bash - 以 ./script.sh 和 . ./脚本.sh

c++ - C++ 头文件中空引用驱动的段错误

linux - shell脚本,以bash运行docker镜像,执行db dump并将文件复制到主机

python - 时区时间戳怪异

bash - 使用 bash 删除旧文件的最有效方法