以编程方式在 gnome-terminal 中打开选项卡,执行命令,并让选项卡保持打开状态

以编程方式在 gnome-terminal 中打开选项卡,执行命令,并让选项卡保持打开状态

我正在尝试编写一个命令,该命令将启动几个终端选项卡,在每个选项卡中执行某些操作,并让每个选项卡在命令完成后保持打开状态,这样我就可以查看输出并在每个选项卡中键入更多命令

像这样:

gnome-terminal --tab -e "ls -a" --tab -e "ls"

但问题是“ls”命令完成后标签就会关闭。有人知道如何让标签保持打开状态吗?

答案1

Gnome-terminal 可以执行命令或打开 shell,但不能同时执行这两项操作。

有一种解决方法可以同时完成这两项工作,那就是将命令和随后对 shell 的调用封装成一个命令。

$ gnome-terminal -e "bash -c \"echo foo; echo bar; exec bash\""

要了解更多替代方案,请阅读我在 Stack Overflow 上对类似问题的回答:https://stackoverflow.com/questions/3512055/avoid-gnome-terminal-close-after-script-execution/3531426#3531426

答案2

如果你已经安装xdotool并且有wmctrl权限,那么以下 shell 脚本可能会起作用:

#!/usr/bin/env bash

window="$(xdotool search --class gnome-terminal | head -1)"
xdotool windowfocus $window
xdotool key ctrl+shift+t
xdotool type "$*"
xdotool key Return

我这样使用它:

$ run-in-new-tab 'ls -l'

我发现这个想法Trustin Lee 的博客

答案3

对我来说,lesmana 的答案不适用于多个选项卡(至少在 3.28.2 中)。因此,我找到了一种解决方法:

gnome-terminal --tab [-t title1] -- bash -c "gnome-terminal --tab [-t title2] -- bash -c \"ls; exec bash\"; ls -a; exec bash"

这将打开一个选项卡并再次执行 gnome-terminal 命令,该命令打开第二个选项卡并执行第二个选项卡的命令,返回到第一个选项卡,执行第一个选项卡的命令。

相关内容