脚本执行后避免 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@--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 关闭?的主要内容,如果未能解决你的问题,请参考以下文章