我正在尝试创建一个非常简单的 shell 脚本来打开并运行我的程序的五个实例。对于批处理,我会做这样的事情:
@echo off
python webstore.py 55530
python webstore.py 55531
python webstore.py 55532
exit
这将打开三个终端并使用不同的命令行参数在每个终端上运行命令。我将如何使用在每个基于 unix 的平台上运行的 shell 脚本来创建相同的内容?我见过一些用于打开终端的命令,但它们是特定于平台的(gnome-termial、xterm 等等)。
最佳答案
How would I create the same with a shell script that runs on every single unix-based platform?
你的要求有点不合理。这样想:在 Windows 上,你总是在它的 Desktop Window Manager 中。 , 期间,您唯一的选择是 Powershell 和 cmd.exe
。但是在 Linux 上,它有点复杂:
- 如您所说,您可以安装
rxvt
或xterm
。 - 但这不是唯一的问题——您可以使用任何窗口管理器。虽然这在这里并不重要,
- 您可以使用 Xorg 或 Wayland。继续,
- 您根本不能使用任何图形环境,例如在 Linux 控制台中运行一切!除非您使用诸如
fbterm
或tmux
之类的奇特程序,否则它几乎无法进行多任务处理,而且只能单独生成新窗口。 - 话虽如此,您甚至可能根本不使用这台计算机,因为您是通过 SSH 连接到它的。这里也没有远程窗口(除非你使用东西作为 X11 转发)。
- 最后,您可以使用
zsh
、bash
、sh
、fish
等,它们都自带自己的特质。
IMO 你最好的选择是在你的脚本中测试安装了哪些程序,或者围绕终端多路复用器(如 tmux
)编写脚本并要求它安装在目标机器上。 tmux
的实际应用:
(来源:github.io)
(这将适用于 SSH、Linux 控制台或上述任何其他场景。)
但是,如果您不关心将要运行的命令的输出,您可以像这样将它们从当前终端 session 中分离出来:
command1 &>/dev/null &
command2 &>/dev/null &
command3 &>/dev/null &
请注意:
- 将并行运行命令。
- 不会向您显示任何输出。如果删除
&>/dev/null
,每个命令的输出将相互交织,这可能不是您想要的。 - 关闭终端通常会杀死它的子进程,在这种情况下,这会杀死在后台运行的
command
实例。
上面提到的问题可以解决,但我认为这有点超出了这个答案的范围。
就我个人而言,我会选择 tmux
或分离解决方案,具体取决于我是否需要查看控制台输出。
关于linux - shell 脚本 : open multiple terminals and run commands?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36680847/