如何创建一个打开终端窗口并在其中执行命令的脚本?
当我启动Ubuntu机器时,我需要运行三个脚本,它们启动我在开发环境中使用的服务。
为此,我手动打开三个终端并输入命令。
有没有办法创建一个脚本,打开三个终端并在每个终端中执行一个命令? (每个命令应该在一个单独的终端窗口中,以便我可以看到它们的输出)。
gnome-terminal -e command
要么
xterm -e command
要么
konsole -e command
差不多
terminal -e command
要在命令退出时使终端停留:
在konsole中有一个--noclose
标志。
在xterm中,有一个-hold
标志。
在gnome-terminal
,转到编辑 – > 配置文件首选项 – > 标题 。 单击“ 命令”选项卡。 从标记为“ 退出命令”的下拉菜单中选择“ 保留终端” 。 您应该为其创建一个新的配置文件并执行
gnome-terminal --window-with-profile = NAMEOFTHEPROFILE -e 命令
而不是硬编码gnome-terminal
, konsole
等等,使用Alternatives系统。 执行默认终端仿真器的程序是:
x-terminal-emulator
在我的系统上,每次执行此命令时,它都会打开一个新的Konsole实例。
幸运的是,终端似乎支持执行命令的-e
选项(我为konsole
和gnome-terminal
validation了它)。 命令后的参数将传递给调用的命令。 Bash拒绝在我的终端中保持打开状态,需要一个额外的脚本来获取终端:
#!/bin/sh "$@" exec "$SHELL"
如果您将以前的脚本保存为/home/user/hacky
并使其可执行,则可以使用以下命令运行脚本:
x-terminal-emulator -e /home/user/hacky your-script optional arguments here
完整路径是必需的,并且/home/user/hacky
必须是可执行的。
我之前尝试在新的终端窗口中运行脚本可以在修订版#2中找到,在我意识到参数可以传递给x-terminal-emulator
。
很简单 –
#!/bin/bash /etc/init.d/ccpd status
这对于其他不需要在终端中显示任何内容的命令就足够了。 但是这里必须看到状态显示。
因此,它需要在终端窗口中运行
#!/bin/bash gnome-terminal -e "/etc/init.d/ccpd status" --window-with-profile=NAMEOFTHEPROFILE
另一篇文章打算将[]
作为占位符
这里“NAMEOFTHEPROFILE”将替换为“当命令退出时保持终端”的配置文件的名称。
评论Lekensteyn的答案。 我知道这是一个老post,但对于任何发现这个有用的人(正如我刚才所做的那样)而不是在你调用的脚本中放入一个函数来制作另一个“hacky脚本”
hacky_function() { "$@" exec "$SHELL" }
使用“x-terminal-emulator -e / path / to / hacky_function可选参数在这里”调用脚本
不要忘记在脚本末尾添加“$ @”
使用屏幕命令和现有屏幕会话中的-d分离,并在此处重新挂接-m强制新的屏幕会话-S创建命名会话而不是使用默认名称