脚本执行后避免 gnome-terminal 关闭?

Posted

技术标签:

【中文标题】脚本执行后避免 gnome-terminal 关闭?【英文标题】:Avoid gnome-terminal close after script execution? 【发布时间】:2011-03-31 12:51:28 【问题描述】:

我创建了一个 bash 脚本,它可以打开几个 gnome 终端,通过 ssh 连接到教室计算机并运行一个脚本。

如何避免 gnome-terminal 在脚本完成后关闭?请注意,我还希望能够在终端中输入更多命令。

这是我的代码示例:

gnome-terminal -e "ssh root@<ip> cd /tmp && ls"

【问题讨论】:

Prevent Gnome Terminal From Exiting After Execution 的可能重复项 还有:askubuntu.com/q/3359/6506 【参考方案1】:

据我了解,您希望 gnome-terminal 打开,让它执行一些命令,然后放到提示符处,这样您就可以输入更多命令。 Gnome-terminal 不是为此用例设计的,但有一些解决方法:

让 gnome-terminal 运行 bash 并告诉 bash 运行你的命令,然后运行 ​​bash

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

最后的exec bash 是必要的,因为bash -c 将在命令完成后终止。 exec 导致正在运行的进程被新进程替换,否则您将有两个 bash 进程在运行。

让 gnome-terminal 使用准备好的 rcfile 运行 bash,该 rcfile 会运行您的命令

准备somercfile:

source ~/.bashrc
echo foo
echo bar

然后运行:

$ gnome-terminal -e "bash --rcfile somercfile"

让 gnome-terminal 运行一个脚本,该脚本运行你的命令,然后放到 bash

准备scripttobash:

#!/bin/sh
echo foo
echo bar
exec bash

将此文件设置为可执行文件。

然后运行:

$ gnome-terminal -e "./scripttobash"

您也可以创建一个genericscripttobash:

#!/bin/sh
for command in "$@"; do
  $command
done
exec bash

然后运行:

$ gnome-terminal -e "./genericscripttobash \"echo foo\" \"echo bar\""

每种方法都有它的怪癖。你必须选择,但要明智地选择。我喜欢第一个解决方案的冗长和直截了当。

说了这么多,这可能对你有用:http://www.linux.com/archive/feature/151340

【讨论】:

可能值得注意的是,rcfile 解决方案允许在获取 `.bashrc` 文件后运行命令,而其他选项均不允许您执行这样做。 虽然这很疯狂,但我很高兴偶然发现了这篇文章。我有一个脚本在配置文件中使用了“Hold”方法,而白痴不断点击弹出的重新启动按钮并导致问题!【参考方案2】:

最后这个对我有用:

gnome-terminal --working-directory=WORK_DIR -x bash -c "COMMAND; bash"

【讨论】:

【参考方案3】:

堆栈溢出答案:终端在其内部运行的命令完成后关闭,因此您需要编写一个不会立即终止的命令。例如,要让终端窗口保持打开状态,直到您在其中按 Enter

gnome-terminal -e "ssh host 'cd /tmp && ls'; read line"

Super User 回答:创建一个配置文件,其中首选项“标题和命令/命令退出时”设置为“保持终端打开”。使用 --window-with-profile--tab-with-profile 选项调用 gnome-terminal 以指定终端名称。

【讨论】:

这个想法有帮助,但没有达到我想要的效果。如上所述,我将在终端中自动执行一些命令。执行后,我将能够手动输入一些命令。过去我手动(复制/粘贴): 1. ssh root@ 2. cd /root/install && ./WriteImage.sh && InitImage.py 3. 第 2 行.我用手抄到20台电脑的20台终端。我不能自动执行第 1 步和第 2 步,还可以像第 3 步一样手动输入其他命令吗? --window-with-profile' (which opens separate terminals) or --tab-with-profile`(在单个终端中打开选项卡)的问题是,一旦脚本在选项卡/窗口中完成运行,或者当我按下 @987654330 @,选项卡/窗口立即关闭。我不希望它关闭。我希望该选项卡保持打开状态并显示 bash 提示符,以便我可以继续在该选项卡的 bash 提示符中键入命令。这不可能吗? read line 只暂停用户输入,这不是我想要的。任何帮助将不胜感激。 @Nav 这是一个不同的问题:您想让 shell 保持打开状态,而不是终端。我敢肯定之前有人问过,可能是在Super User 或Unix & Linux 而不是Stack Overflow,因为这不是编程问题(但也可能在Stack Overflow 上)。【参考方案4】:

使用-ic 而不是-i 运行以在您关闭终端 gui 时使终端关闭 bash 进程:

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

【讨论】:

【参考方案5】:

理想的解决方案是通过 echo "Press any key" 请求用户输入。

但如果在 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

【讨论】:

【参考方案6】:

截至 2020 年 1 月,gnome-terminal 中的 -e 选项仍然可以正常运行,但会抛出以下警告:

对于-e

# 选项“-e”已弃用,可能会在以后的版本中删除 gnome 终端。

# 使用“--”终止选项并将命令行放入 在它之后执行。

基于以上信息,我确认您可以运行以下两个命令而不会收到任何警告消息:

$ gnome-terminal -- "./scripttobash"
$ gnome-terminal -- "./genericscripttobash \"echo foo\" \"echo bar\""

我希望这可以帮助目前遇到此问题的其他人:)

【讨论】:

【参考方案7】:

对于适用于任何终端的解决方案,有一个脚本可以打开终端,运行指定的命令并在新终端中返回提示:

https://***.com/a/60732147/1272994

【讨论】:

【参考方案8】:

我真的很喜欢 bash --rcfile 方法

我只是 source ~/.bashrc 然后将我想要的命令添加到新的 startrc.sh

现在我的自动 start.sh 工作环境已经完成......暂时 ?

【讨论】:

您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center。【参考方案9】:

如果运行 bash 脚本,只需将 gedit afile 添加到脚本末尾,这将使 gnome-terminal 保持打开状态。 “afile”可能是一个构建日志,就我而言。

没有尝试单独使用gedit,但这也可以正常工作。

【讨论】:

【参考方案10】:

使用nohup 命令。

nohup gnome-terminal -e "ssh root@ cd /tmp && ls"

希望这会对你有所帮助。

【讨论】:

窗口仍然立即关闭。 或许你应该使用 nohup 来启动主脚本? 我看不出 nohup 在这里有什么帮助。 nohup 与 OP 的要求相反。

以上是关于脚本执行后避免 gnome-terminal 关闭?的主要内容,如果未能解决你的问题,请参考以下文章

如何避免Docker容器启动脚本运行后自动退出

代码块停止使用 gnome-terminal (linux) 执行

ubuntu系统设置开机后使用使用终端运行应用程序

如何在Unity中执行Python脚本后让其终端自行关闭

网页关闭后js脚本是不是还能继续执行?

bat 脚本执行cmd命令代码实例 执行后不关闭窗口 可以继续输入方法