【发布时间】:2011-03-31 12:51:28
【问题描述】:
我创建了一个 bash 脚本,它可以打开几个 gnome 终端,通过 ssh 连接到教室计算机并运行一个脚本。
如何避免 gnome-terminal 在脚本完成后关闭?请注意,我还希望能够在终端中输入更多命令。
这是我的代码示例:
gnome-terminal -e "ssh root@<ip> cd /tmp && ls"
【问题讨论】:
我创建了一个 bash 脚本,它可以打开几个 gnome 终端,通过 ssh 连接到教室计算机并运行一个脚本。
如何避免 gnome-terminal 在脚本完成后关闭?请注意,我还希望能够在终端中输入更多命令。
这是我的代码示例:
gnome-terminal -e "ssh root@<ip> cd /tmp && ls"
【问题讨论】:
据我了解,您希望 gnome-terminal 打开,让它执行一些命令,然后放到提示符处,这样您就可以输入更多命令。 Gnome-terminal 不是为此用例设计的,但有一些解决方法:
$ gnome-terminal -e "bash -c \"echo foo; echo bar; exec bash\""
最后的exec bash 是必要的,因为bash -c 将在命令完成后终止。 exec 导致正在运行的进程被新进程替换,否则您将有两个 bash 进程在运行。
rcfile 运行 bash,该 rcfile 会运行您的命令准备somercfile:
source ~/.bashrc
echo foo
echo bar
然后运行:
$ gnome-terminal -e "bash --rcfile somercfile"
准备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` 文件后运行命令,而其他选项均不允许您执行这样做。
最后这个对我有用:
gnome-terminal --working-directory=WORK_DIR -x bash -c "COMMAND; bash"
【讨论】:
堆栈溢出答案:终端在其内部运行的命令完成后关闭,因此您需要编写一个不会立即终止的命令。例如,要让终端窗口保持打开状态,直到您在其中按 Enter:
gnome-terminal -e "ssh host 'cd /tmp && ls'; read line"
Super User 回答:创建一个配置文件,其中首选项“标题和命令/命令退出时”设置为“保持终端打开”。使用 --window-with-profile 或 --tab-with-profile 选项调用 gnome-terminal 以指定终端名称。
【讨论】:
--window-with-profile' (which opens separate terminals) or --tab-with-profile`(在单个终端中打开选项卡)的问题是,一旦脚本在选项卡/窗口中完成运行,或者当我按下 @987654330 @,选项卡/窗口立即关闭。我不希望它关闭。我希望该选项卡保持打开状态并显示 bash 提示符,以便我可以继续在该选项卡的 bash 提示符中键入命令。这不可能吗? read line 只暂停用户输入,这不是我想要的。任何帮助将不胜感激。
使用-ic 而不是-i 运行以在您关闭终端 gui 时使终端关闭 bash 进程:
gnome-terminal -e "bash -ic \"echo foo; echo bar; exec bash\""
【讨论】:
理想的解决方案是通过 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
【讨论】:
截至 2020 年 1 月,gnome-terminal 中的 -e 选项仍然可以正常运行,但会抛出以下警告:
对于-e:
# 选项“-e”已弃用,可能会在以后的版本中删除 gnome 终端。
# 使用“--”终止选项并将命令行放入 在它之后执行。
基于以上信息,我确认您可以运行以下两个命令而不会收到任何警告消息:
$ gnome-terminal -- "./scripttobash"
$ gnome-terminal -- "./genericscripttobash \"echo foo\" \"echo bar\""
我希望这可以帮助目前遇到此问题的其他人:)
【讨论】:
对于适用于任何终端的解决方案,有一个脚本可以打开终端,运行指定的命令并在新终端中返回提示:
【讨论】:
我真的很喜欢 bash --rcfile 方法
我只是 source ~/.bashrc 然后将我想要的命令添加到新的 startrc.sh
现在我的自动 start.sh 工作环境已经完成......暂时 ?
【讨论】:
如果运行 bash 脚本,只需将 gedit afile 添加到脚本末尾,这将使 gnome-terminal 保持打开状态。 “afile”可能是一个构建日志,就我而言。
没有尝试单独使用gedit,但这也可以正常工作。
【讨论】:
【讨论】: