0

我必须在 Fedora Linux 中处理一个项目,并且必须经常输入以下内容:

player map1.cfg &

我发现我可以创建一个可执行的 .sh 文件,它包含以下内容:

#!/bin/bash
player *.cfg &

但是,当双击 runmap.sh 文件时,它会显示“在终端中运行”、“显示”、“取消”和“运行”,当我单击“在终端中运行”时,终端窗口会立即打开和关闭。如果我只是点击“运行”,那么 .cfg 会打开,但我需要终端窗口来运行其他 (Java) 文件。

我该如何解决这个问题?

其他信息:

  • 我之所以使用*.cfg,是因为我想将 .sh 文件复制并粘贴到也包含 .cfg 文件(例如 map2.cfg、map3.cfg 等)的其他文件夹中。

  • 它适用于播放器/舞台项目。

4

2 回答 2

2

当您从文件管理器运行脚本时,启动的 shell 不是交互式的。shell 只能读取脚本文件。

除了文件之外,要打开交互式 shell,您可以exec在脚本末尾打开新 shell,并使用“在终端中运行”:

#!/bin/bash
player *.cfg &
exec /bin/bash
于 2012-12-04T19:11:20.233 回答
1

好吧,让我们这样看。

当您在终端中运行该命令时,该命令作为子进程启动,然后被发送到后台。一旦命令完成,它就会终止。在后台运行期间,您仍然可以发出命令,因为您的父进程就是终端窗口本身。

当您编写一个发出命令以在后台运行的脚本时,它会启动,将该命令作为子命令生成,然后由于脚本完成而关闭。

这些是操作系统的行为,并且确实不应该改变。因此,本质上您所要求的是一种为您自己快速运行命令但仍然留下命令终端供您使用的方法?

1) 为什么输入命令这么麻烦?出于这个原因,Bash 和其他终端具有历史功能。

2) 当您需要调用命令时,为什么不直接从终端窗口调用您编写的迷你脚本。如果您将脚本放在 $PATH 变量上的文件夹中,您可以在终端的任何位置使用它。

于 2012-12-04T19:02:00.533 回答