要同时运行命令,可以使用&
命令分隔符。
~$ command1 & command2 & command3
这将开始command1
,然后在后台运行。与相同command2
。然后command3
正常启动。
所有命令的输出都将乱码显示,但是如果这对您来说不是问题,那将是解决方案。
如果以后要单独查看输出,可以将每个命令的输出通过管道tee
传输到,从而可以指定一个文件来镜像输出。
~$ command1 | tee 1.log & command2 | tee 2.log & command3 | tee 3.log
输出可能会很混乱。为了解决这个问题,您可以使用来给每个命令的输出加上前缀sed
。
~$ echo 'Output of command 1' | sed -e 's/^/[Command1] /'
[Command1] Output of command 1
因此,如果将所有这些放在一起,我们将得到:
~$ command1 | tee 1.log | sed -e 's/^/[Command1] /' & command2 | tee 2.log | sed -e 's/^/[Command2] /' & command3 | tee 3.log | sed -e 's/^/[Command3] /'
[Command1] Starting command1
[Command2] Starting command2
[Command1] Finished
[Command3] Starting command3
这是您可能会看到的高度理想化的版本。但是这是我现在能想到的最好的。
如果您想一次停止所有这些,则可以使用build in trap
。
~$ trap 'kill %1; kill %2' SIGINT
~$ command1 & command2 & command3
这将执行command1
,并command2
在后台command3
在前台,它可以让你杀了它Ctrl+ C。
当你杀的最后一个进程与Ctrl+ C的kill %1; kill %2
命令被执行,因为我们有INTerupt信号,按发送的东西的接收连接它们的执行Ctrl+ C。
他们分别杀死了第一个和第二个后台进程(您command1
和command2
)。在使用完命令之后,别忘了删除陷阱trap - SIGINT
。
完整的命令怪物:
~$ trap 'kill %1; kill %2' SIGINT
~$ command1 | tee 1.log | sed -e 's/^/[Command1] /' & command2 | tee 2.log | sed -e 's/^/[Command2] /' & command3 | tee 3.log | sed -e 's/^/[Command3] /'
您当然可以看一下screen。它使您可以根据需要将控制台拆分为多个单独的控制台。因此,您可以同时监视所有命令。