如何制作一个打开终端窗口并在其中执行命令的脚本?

JSB*_*ach 188 command-line scripts services

我在启动 Ubuntu 机器时需要运行三个脚本,它们启动我在开发环境中使用的服务。

为此,我手动打开三个终端并输入命令。

有没有办法创建一个脚本来打开三个终端并在每个终端中执行一个命令?(每个命令都应该在一个单独的终端窗口中,以便我可以看到它们的输出)。

nic*_*kii 185

gnome-terminal -- command
Run Code Online (Sandbox Code Playgroud)

或者

xterm -e command
Run Code Online (Sandbox Code Playgroud)

或者

konsole -e command
Run Code Online (Sandbox Code Playgroud)

差不多

terminal -e command
Run Code Online (Sandbox Code Playgroud)

要在命令退出时使终端停留:

在 konsole 有--noclose一面旗帜。

在 xterm 中,有一个-hold标志。

在 中gnome-terminal,转到Edit -> Profile Preferences -> Title。单击命令选项卡。从标记为When command exits的下拉菜单中选择Hold the terminal。您应该为此创建一个新的配置文件并执行

gnome-terminal --window-with-profile= NAMEOFHEPROFILE -e命令

  • 现在考虑使用:`gnome-terminal -- 命令` (5认同)
  • 如果我尝试按住终端,我会得到“子进程以状态码 127 正常退出” (2认同)
  • gnome-terminal 不再有标题选项:( (2认同)

Lek*_*eyn 77

使用 Alternatives 系统,而不是硬编码gnome-terminalkonsole等等。执行默认终端模拟器的程序是:

x-terminal-emulator
Run Code Online (Sandbox Code Playgroud)

在我的系统上,每次执行此命令时,它都会打开一个新的 Konsole 实例。

幸运的是,终端似乎支持-e执行命令的选项(我验证了konsolegnome-terminal)。命令后的参数传递给调用的命令。Bash 拒绝在我的终端中保持打开状态,需要一个额外的脚本来获取终端:

#!/bin/sh
"$@"
exec "$SHELL"
Run Code Online (Sandbox Code Playgroud)

如果您已将先前的脚本另存为/home/user/hacky并使其可执行,您将使用以下命令运行您的脚本:

x-terminal-emulator -e /home/user/hacky your-script optional arguments here
Run Code Online (Sandbox Code Playgroud)

完整路径是必需的,/home/user/hacky并且必须是可执行的。

我之前在新终端窗口中运行脚本的尝试可以在修订版 #2 中找到,这是在我意识到可以将参数传递给x-terminal-emulator.

  • @Suda.nese 这是设计使然,当“终端”完成执行脚本时,它将退出,因为没有其他事情可做。您可以通过调用一个 shell 来“修复”这个问题,您可以在其中执行命令 (`bash`) 或使用诸如 `read -p "Press Return to continue"` 之类的行。 (3认同)

Gab*_*les 13

2020 年 2 月 17 日更新:这个答案现在可能已经过时了。

考虑单击此链接并改用我的其他答案:使用多个选项卡打开终端并执行应用程序


借助@nickguletskii 的回答以及我自己在他的回答下发表的评论,以及受到@grabantot 对我评论的支持的启发,这是我的首选方式,尤其是当我希望终端保持打开状态以便我可以手动使用它时。

前任。用法:这对于添加到您的启动程序非常有用,因此该脚本将运行,打开终端,在终端中创建和命名选项卡,并为您运行命令。或者,您可以将此脚本的符号链接添加到桌面。我使用这种类型的方法,因此我可以双击桌面上的单个图标,然后打开一堆终端(根据我将在其中执行的工作命名的各种选项卡)和要设置的程序我的编程环境,例如,用于日常工作。

这是一个人为的示例,它打开一个选项卡,将其命名为“测试”,然后在其中运行简单的命令cd /etc; ls。最后的$SHELL部分强制 shell 保持打开状态,这样您就可以看到它的输出并继续使用它(我在 Stack Overflow 的其他地方学到了这一点):

gnome-terminal --tab --title="test" --command="bash -c 'cd /etc; ls; $SHELL'"
Run Code Online (Sandbox Code Playgroud)

这是一个更复杂的示例,它在同一个 gnome 终端中打开了 3 个单独的选项卡。这正是我的桌面快捷方式所做的事情,所以我可以一次打开一堆编程窗口:

gnome-terminal --tab --title="tab 1" --command="bash -c 'cd /etc; ls; $SHELL'" --tab --title="tab 2" --command="bash -c 'cd ~; ls; $SHELL'" --tab --title="tab 3" --command="bash -c 'cd ~/temp3; ls; $SHELL'"
Run Code Online (Sandbox Code Playgroud)

这是上面该命令的细分:

  • gnome-terminal = 打开一个 gnome 终端
  • --tab =为接下来的内容打开一个独特的标签
  • --title="tab 1" = 将此标签命名为“标签 1”
  • --command="bash -c 'cd /etc; ls; $SHELL'"= 运行bash -c 'cd /etc; ls; $SHELL'命令,这是我刚刚编的一个命令作为例子;这是它的作用:
  • bash -c 说这是一个 bash 命令
  • cd /etc = 'c'hange 'd'irectory 进入“/etc”路径
  • ls = '我'不是这个目录的内容
  • $SHELL= 这个神秘的花絮是保持外壳打开所必需的,以便您可以使用它。如果您希望外壳打开,请运行您的命令,然后关闭,只需删除此部分即可。但是,我希望该选项卡保持打开状态,以便我可以使编程变得神奇。:)
  • 然后我们重新开始--tab制作标签 2,然后再次制作标签 3。根据您的喜好进行定制。

截屏:

在此处输入图片说明


Kar*_*k T 10

很简单——

#!/bin/bash

/etc/init.d/ccpd status
Run Code Online (Sandbox Code Playgroud)

这对于不需要在终端中显示任何内容的其他命令来说已经足够了。但在这里必须看到显示的状态。
所以,它需要在终端窗口中运行

#!/bin/bash

gnome-terminal -e "/etc/init.d/ccpd status"  --window-with-profile=NAMEOFTHEPROFILE
Run Code Online (Sandbox Code Playgroud)

另一个帖子打算[]作为占位符

这里的“NAMEOFTHEPROFILE”将被替换为“命令退出时保持终端”的配置文件的名称。

在此处输入图片说明

在此处输入图片说明

  • @cipricus 如果这对您来说已经足够了,那就可以了。配置文件只不过是一组设置。您可以设置仅在脚本中使用的设置,而不必在所有终端中使用它。您可以看到“编辑”->“配置文件”以查看您拥有的所有配置文件,并且您可以在那里添加一个配置文件,按照您链接的帖子中的说明进行设置 (2认同)