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

Mar*_*uer 61 linux ssh bash shell

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

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

这是我的代码示例:

gnome-terminal -e "ssh root@<ip> cd /tmp && ls"
Run Code Online (Sandbox Code Playgroud)

les*_*ana 86

据我所知,你想让gnome-terminal打开,让它执行一些命令,然后放到提示符下,这样你就可以输入更多的命令了.Gnome-terminal不是为这个用例而设计的,但有一些解决方法:

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

$ gnome-terminal -e "bash -c \"echo foo; echo bar; exec bash\""
Run Code Online (Sandbox Code Playgroud)

exec bash因为到底是必要的bash -c,一旦命令完成了将终止.exec导致正在运行的进程被新进程替换,否则您将运行两个bash进程.

让gnome-terminal运行bash,rcfile并运行你的命令

准备somercfile:

source ~/.bashrc
echo foo
echo bar
Run Code Online (Sandbox Code Playgroud)

然后运行:

$ gnome-terminal -e "bash --rcfile somercfile"
Run Code Online (Sandbox Code Playgroud)

让gnome-terminal运行一个脚本来运行你的命令然后下降到bash

准备scripttobash:

#!/bin/sh
echo foo
echo bar
exec bash
Run Code Online (Sandbox Code Playgroud)

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

然后运行:

$ gnome-terminal -e "./scripttobash"
Run Code Online (Sandbox Code Playgroud)

或者你可以做一个genericscripttobash:

#!/bin/sh
for command in "$@"; do
  $command
done
exec bash
Run Code Online (Sandbox Code Playgroud)

然后运行:

$ gnome-terminal -e "./genericscripttobash \"echo foo\" \"echo bar\""
Run Code Online (Sandbox Code Playgroud)

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

总而言之,这可能对您有用:http://www.linux.com/archive/feature/151340


Luk*_*ski 13

最后这个对我有用:

gnome-terminal --working-directory=WORK_DIR -x bash -c "COMMAND; bash"
Run Code Online (Sandbox Code Playgroud)


Gil*_*il' 11

  • Stack Overflow answer:终端在其内部运行的命令完成后关闭,因此您需要编写一个不会立即终止的命令.例如,要将终端窗口保持打开状态,直到您按下Enter它:

    gnome-terminal -e "ssh host 'cd /tmp && ls'; read line"
    
    Run Code Online (Sandbox Code Playgroud)
  • 超级用户答案:创建一个配置文件,其中首选项"标题和命令/何时命令退出"设置为"保持终端打开".使用--window-with-profile--tab-with-profile选项调用gnome-terminal 以指定终端名称.

  • “--window-with-profile”(打开单独的终端)或“--tab-with-profile”(在单个终端中打开选项卡)的问题是,一旦脚本在选项卡/窗口中完成运行,或者当我按“Ctrl+c”时,选项卡/窗口立即关闭。我不想让它关闭。我希望该选项卡保持打开状态并显示 bash 提示符,以便我可以继续在该选项卡的 bash 提示符中键入命令。这无论如何都不可能吗?`read line` 仅在用户输入时暂停,这不是我想要的。任何帮助,将不胜感激。 (2认同)

Zin*_*ini 5

当你关闭你的终端gui时,用run -ic来运行-i终端关闭bash进程:

gnome-terminal -e "bash -ic \"echo foo; echo bar; exec bash\""
Run Code Online (Sandbox Code Playgroud)


小智 5

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

\n\n

为了-e

\n\n
\n

# 选项 \xe2\x80\x9c-e\xe2\x80\x9d 已弃用,可能会在更高版本的 gnome-terminal 中删除。

\n\n

# 使用 \xe2\x80\x9c-- \xe2\x80\x9d 终止选项并将命令行放在\n 之后执行。

\n
\n\n

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

\n\n
$ gnome-terminal -- "./scripttobash"\n
Run Code Online (Sandbox Code Playgroud)\n\n
$ gnome-terminal -- "./genericscripttobash \\"echo foo\\" \\"echo bar\\""\n
Run Code Online (Sandbox Code Playgroud)\n\n

我希望这对目前遇到此问题的其他人有所帮助:)

\n