在同一个terminal中同时运行并行多个命令

我想运行一些命令,每个命令在按下Ctrl-C之前都不会退出。 有什么我可以运行一次运行所有的人,和Ctrl-C将退出所有? 他们可以共享terminal输出。

具体来说,我有指南针编译器,coffeescript编译器和一个自定义命令,监视文件更改所有正在运行监视文件更改。 我不想为每个命令加载一个terminal。

Solutions Collecting From Web of "在同一个terminal中同时运行并行多个命令"

这个bash脚本是针对N个并行线程的。 每个参数都是一个命令。

trap SIGINT时, trap将终止所有子进程。
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的评论,要运行多个命令,只需在命令之间使用&

例:

 $ sleep 3 & sleep 5 & sleep 2 & 

它会在后台运行这些命令。

使用GNU并行:

 (echo command1; echo command2) | parallel parallel ::: command1 command2 

杀:

 parallel ::: command1 command2 & PID=$! kill -TERM $PID kill -TERM $PID 

我建议我写一个更简单的工具。 目前被称为par,但很快就会重命名为parl或pll,还没有确定。

https://github.com/k-bx/par

API非常简单:

 par "script1.sh" "script2.sh" "script3.sh" 

前缀命令可以通过以下方式完成:

 par "PARPREFIX=[script1] script1.sh" "script2.sh" "script3.sh" 

要运行多个命令,只需在两个命令之间添加&&command1 && command2

如果你想在两个不同的终端上运行它们,那么你可以这样做:

 gnome-terminal -e "command1" && gnome-terminal -e "command2" 

这将打开2个终端,其中执行command1command2

希望这可以帮助你。