我尝试在启动时打开 4 个终端窗口,并使用以下脚本来实现。但是,它只打开 1 个终端窗口,而不是 4 个。
/bin/sh -c gnome-terminal; /bin/sh -c gnome-terminal; /bin/sh -c gnome-terminal; /bin/sh -c gnome-terminal
我从“启动应用程序”中运行该脚本。如果我从终端窗口手动运行该脚本,它会打开 4 个终端窗口。
所以我的问题是。为什么脚本只在“启动应用程序”中打开 1 个窗口,而它应该打开 4 个?
答案1
/bin/sh -c
如果您从脚本运行它,则不需要它。此外,使用&
而不是;
,就像这样
#!/bin/bash
gnome-terminal -t WINDOW-ONE &
gnome-terminal -t WINDOW-TWO &
gnome-terminal -t WINDOW-THREE &
gnome-terminal -t WINDOW-FOUR &
我认为它的行为之所以像原始脚本中那样,是因为 shell 正在等待每一行脚本先完成,所以它正在等待第一个窗口完成。使用 &,您可以断开 gnome-terminal 与脚本的连接,然后脚本可以继续下一行。希望这有意义
答案2
无需使用单独的脚本在启动时运行四个终端窗口
您不需要单独的脚本来打开四个gnome-terminal
窗口,您可以简单地将它们组合成一个命令,然后添加到启动应用程序中。
如何在 .desktop 文件中使用复杂命令
当您将命令添加到启动应用程序时,它实际上会.desktop
在 中创建一个文件~/.config/autostart
,该文件在启动时(实际上是登录时)运行您的命令。文件中使用的复杂命令的语法.desktop
如下:
/bin/bash -c "<complicated_command>"
/bin/bash -c
但是:你只需要使用单身的时间,因此完整的命令应该是这样的:
/bin/bash -c "gnome-terminal&gnome-terminal&gnome-terminal&gnome-terminal"
这样做的话,您就不需要单独的脚本来完成这项工作了。
链接命令
正如前面提到的,您应该用 来链接命令&
,而不是用;
。
从man bash
:
如果命令以控制操作符 & 结束,则 shell 会在子 shell 中在后台执行该命令。shell 不会等待命令完成,返回状态为 0。以 ; 分隔的命令按顺序执行;shell 会依次等待每个命令终止。返回状态是最后执行的命令的退出状态。