从当前终端打开一个新的终端并运行一个shell脚本。

36

如何在Linux中从终端运行一个新的终端窗口中的shell脚本,类似于Windows中的“start test.bat”,同时它应该能够在控制台模式下工作。


1
你需要支持哪些窗口环境? - Brian Cain
4个回答

38

以下是一个简单的例子,帮助你入门:

要编写一个Shell脚本,请在命令提示符上执行以下操作:

echo -e '#!/bin/sh\n echo "hello world"' > abc.sh

这将输出:

#!/bin/sh
echo "hello world"

创建一个名为abc.sh的文件。

接下来,你需要将其设置为可执行文件:

chmod +x abc.sh

现在,你可以通过以下方式运行它:

./abc.sh

你应该看到:

hello world

在你的终端中执行。

要在新的终端中运行它,可以执行以下命令:

gnome-terminal -x ./abc.sh

或者,如果是 xterm

xterm -e ./abc.sh

这里有一份不同终端仿真器的列表

或者你可以在当前的终端中运行它,但是可以通过以下方式将其放在后台:

./abc.sh &

1
它运行得很好。非常感谢您的帮助,我还有一个疑问:所有类型的Linux操作系统都支持gnome-terminal命令吗? - mreaevnia
@RaviKumar 不,这通常并不是正确的。这在很大程度上取决于Linux发行版使用的桌面环境:http://en.wikipedia.org/wiki/List_of_terminal_emulators 很多时候它是gnome-terminal或xterm。 - sampson-chen
我需要在Telnet会话中使用Linux机器时应该有效的命令。希望能够得到答案。 - mreaevnia
所以,如果你想从你的Windows机器生成一个新的telnet窗口到Linux PC上,你必须从你的Windows环境启动一个新的telnet会话,否则gnome-terminal -x ./abc.sh将无法在你的Windows环境中生成一个新的终端,据我所知,这是在Windows端进行脚本编写,而不再是在Unix端。 - sampson-chen
2
嗨Sampson。我在另一个窗口执行的shell脚本需要挂起。因此,我的原始sh文件需要继续执行下一行命令。我该怎么做?谢谢! - Leo
显示剩余5条评论

7

我来这里是想弄清楚如何让脚本生成一个终端并在其中运行自己,所以对于那些想要做到这一点的人,我找到了以下解决方案:

if [ ! -t 0 ]; then # script is executed outside the terminal?
  # execute the script inside a terminal window with same arguments
  x-terminal-emulator -e "$0" "$@"
  # and abort running the rest of it
  exit 0
fi

等等,如果脚本有被调用的参数呢?这些参数不会在新终端中传递给脚本,是吗? - Kapichu

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

# 选项“-e”已过时,可能在以后的 gnome-terminal 版本中删除。

# 使用“-- ”终止选项,并在其后放置要执行的命令行。

对于 -x

# 选项“-x”已过时,可能在以后的 gnome-terminal 版本中删除。

# 使用“-- ”终止选项,并在其后放置要执行的命令行。

根据上述信息,我确认您可以运行以下两个命令而不会收到任何警告消息:
gnome-terminal -- /bin/sh -c '<your command>'

gnome-terminal -- ./<your script>.sh

我希望这能帮助正在遇到这个问题的其他人 :)

3
对于gnome,请尝试以下操作。
将ls替换为您想要运行的命令。
gnome-terminal -x sh -c "ls|less"

我希望这是你想要的


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接