我想运行一些命令,在按下 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/