避免脚本执行后关闭 gnome-terminal?[关闭]
- 2024-10-17 08:47:00
- admin 原创
- 76
问题描述:
我创建了一个 bash 脚本,打开几个 gnome 终端,通过 ssh 连接到教室计算机并运行脚本。
如何避免脚本完成后 gnome-terminal 关闭?请注意,我还希望能够在终端中输入其他命令。
下面是我的代码示例:
gnome-terminal -e "ssh root@<ip> cd /tmp && ls"
解决方案 1:
让 gnome-terminal 运行 bash 并告诉 bash 运行你的命令,然后启动一个新的 bash:
$ gnome-terminal -- bash -c "echo foo; echo bar; exec bash"
解释:
gnome 终端运行 bash ...
$ gnome-terminal -- bash -c "echo foo; echo bar; exec bash"
^^^^
运行你的命令...
$ gnome-terminal -- bash -c "echo foo; echo bar; exec bash"
^^^^^^^^ ^^^^^^^^
然后重新执行 bash。
$ gnome-terminal -- bash -c "echo foo; echo bar; exec bash"
^^^^^^^^^
如果某些程序仍在运行,gnome 终端将不会关闭。在这种情况下,第二个 bash 仍在运行。这使得 gnome 终端不会关闭,您可以像往常一样在 gnome 终端内与 bash 进行交互。
如果命令很多或者很复杂,您可以将它们放在脚本中:
$ gnome-terminal -- bash -c "./scripttorun; exec bash"
^^^^^^^^^^^^^
优点:您已准备好在此 gnome-terminal 构造之外手动运行脚本。
选择:
您也可以直接在脚本中重新执行 bash
准备scripttobash
:
#!/bin/sh
echo foo
echo bar
exec bash
然后运行:
$ gnome-terminal -- ./scripttobash
优点是 gnome 终端命令变得相当简单。
缺点是脚本现在总是运行第二个 bash。这意味着您无法独立运行该脚本。实际上您可以,但第二个 bash 可能会引起混乱。
选择:
用于--rcfile
运行包含您的命令的自定义启动配置。
例子somercfile
:
source ~/.bashrc
echo foo
echo bar
然后运行:
$ gnome-terminal -- bash --rcfile somercfile
bash 之后会保持打开状态。但我不完全确定这可能会产生的其他副作用。
为了完整性:
执行命令后,有一个选项可以让 gnome 终端保持打开。但您将无法再进行交互。只需读取输出。
转到偏好设置(汉堡按钮 -> 偏好设置)
转到个人资料(我建议为这种情况创建一个新的个人资料)
转到命令选项卡
将“当命令退出时”设置为“保持终端打开”
如果你创建了新的配置文件,你可以像这样使用它:
gnome-terminal --profile=holdopen -- ./scripttorun
结束语:
每种方法都有其特点。你必须做出选择,但要明智选择。
我喜欢第一个解决方案。它不需要额外的文件或配置文件。命令说明了它的作用:运行命令,然后再次运行 bash。
尽管如此,由于您在示例中使用了 ssh,因此您可能需要查看pssh
(并行 ssh)。这里有一篇文章: https: //www.cyberciti.biz/cloud-computing/how-to-use-pssh-parallel-ssh-program-on-linux-unix/
解决方案 2:
最后这个对我有用:
gnome-terminal --working-directory=WORK_DIR -x bash -c "COMMAND; bash"
解决方案 3:
Stack Overflow 回答:终端在命令运行完成后关闭,因此您需要编写一个不会立即终止的命令。例如,要让终端窗口保持打开状态直到您按下
Enter
它:
gnome-terminal -e "ssh host 'cd /tmp && ls'; read line"
超级用户答案:创建一个配置文件,其中首选项“标题和命令/命令退出时”设置为“保持终端打开”。使用
--window-with-profile
或--tab-with-profile
选项调用 gnome-terminal 来指定终端名称。
解决方案 4:
当您关闭终端 GUI 时,运行-ic
以下命令使终端关闭 bash 进程:-i
gnome-terminal -e "bash -ic \"echo foo; echo bar; exec bash\""
解决方案 5:
截至 2020 年 1 月,该-e
选项gnome-terminal
仍可正常运行,但会引发以下警告:
为了-e
:
选项“-e”已弃用,可能会在 gnome-terminal 的后续版本中被删除。
使用“--”来终止选项,并将要执行的命令行放在其后。
根据以上信息,我确认您可以运行以下两个命令而不会收到任何警告消息:
$ gnome-terminal -- "./scripttobash"
$ gnome-terminal -- "./genericscripttobash \"echo foo\" \"echo bar\""
我希望这可以帮助其他遇到此问题的人:)
解决方案 6:
理想的解决方案是要求用户输入回显“按任意键”。
但是如果在 Nautis 或 Nemo 中双击并选择在终端中运行,它似乎不起作用。
对于Ubuntu,使用专为快速启动和执行而设计的 shell,仅具有标准功能,我认为名为 dash。因此,shebang 是启动时的第一行,以便正确使用 bash 功能。通常这应该是:#!/bin/bash 或类似的。在 Ubuntu 中,我了解到这应该是:#!/usr/bin/env bash。
在解释器看到 bash 命令中的语法错误之前,存在许多解决方法来保持屏幕的控制。
Ubuntu 中对我有用的解决方案:
#!/usr/bin/env bash
your code
echo Press a key...
read -n1
解决方案 7:
我非常喜欢 bash --rcfile 方法
我只需 source ~/.bashrc 然后将我想要的命令添加到新的 startrc.sh
现在我的自动化 start.sh 工作环境已经完成... 暂时
解决方案 8:
如果运行 bash 脚本,只需将其添加gedit afile
到脚本末尾,这样 gnome-terminal 就会保持打开状态。“afile”可能是构建日志,在我的情况下就是如此。
没有尝试过单独使用gedit
,但是那样也能正常工作。
解决方案 9:
使用nohup命令。
nohup gnome-terminal -e "ssh root@ cd /tmp && ls"
希望这对你有帮助。
- 2024年20款好用的项目管理软件推荐,项目管理提效的20个工具和技巧
- 2024年开源项目管理软件有哪些?推荐5款好用的项目管理工具
- 项目管理软件有哪些?推荐7款超好用的项目管理工具
- 项目管理软件哪个最好用?盘点推荐5款好用的项目管理工具
- 项目管理软件有哪些最好用?推荐6款好用的项目管理工具
- 项目管理软件有哪些,盘点推荐国内外超好用的7款项目管理工具
- 2024项目管理软件排行榜(10类常用的项目管理工具全推荐)
- 项目管理软件排行榜:2024年项目经理必备5款开源项目管理软件汇总
- 2024年常用的项目管理软件有哪些?推荐这10款国内外好用的项目管理工具
- 项目管理必备:盘点2024年13款好用的项目管理软件