如何让 sh 脚本在终端中执行命令

如何让 sh 脚本在终端中执行命令

我最近养成了编程的习惯。我看到这个教程让我使用一个名为 SearXNG 的程序,它允许我制作自己的私人搜索引擎。(顺便说一下,点击此处查看教程)这使得我必须特别执行此命令来运行搜索引擎:

cd searxng-docker && sudo docker-compose up -d

(顺便说一下,cd 在那里是因为 searxng-docker 是代码安装的目录)

现在我想创建一个 sh 脚本,如果我运行它,搜索引擎就会自动启动。我看过多个教程,它们向我展示了如何用 sh 脚本编写代码,但没有一个对我有用。

exec cd searxng-docker && sudo docker-compose up -d

我尝试将其放入脚本中,它打开了终端,但没有执行命令。我该如何解决这个问题?

答案1

好吧...感谢所有试图回答我问题的人,但我自己找到了答案。所以如果你想找到这个问题的答案,那就看看这个吧。

首先需要澄清一点。所有 .sh 脚本都可以运行 bash 命令。您只需添加 SHEBANG 行即可。

SHEBANG 行指定将使用哪个应用程序来运行脚本。此应用程序可以是 Python 或 Bash 中的任何应用程序。

为了使脚本通过 bash 运行,我们需要在脚本开头输入以下内容:

#!/bin/bash

现在我们已经添加了 SHEBANG 行,该脚本中的所有行都将作为 bash 命令运行。

接下来,我们可以简单地添加我们想要执行的命令。现在脚本看起来就像这样:

#!/bin/bash
cd searxng-docker
sudo docker-compose up -d

现在我们可以进行一个简单的更改,使脚本更高效一些。如果你看一下这一cd行,你会看到我们正在进入searxng-docker文件夹。这意味着该cd命令指向文件夹的相对位置。这很糟糕,因为如果我们在主目录以外的任何其他目录中,cd 命令将不起作用。

为了解决这个问题,我们必须将cd searxng-docker命令替换为cd /home/<your-username>/searxng-docker命令。不要忘记将替换<your-username>为您的真实用户名。

现在只剩下一个问题:让脚本可执行。

为此,请在终端中输入:chmod +x ./<your-script-name>然后再次替换<your-script-name>为您创建的脚本的名称。

现在您的脚本已准备就绪,您可以通过右键单击脚本并选择“作为程序运行”或./<your-script-name>在终端中输入来执行它,再次替换<your-script-name>为您创建的脚本的名称。

答案2

exec cd searxng-docker && sudo docker-compose up -d

在讨论您的具体情况之前,首先进行一般性解释。此命令将首先更改目录(cdsearxng-docker)。只有成功后(&&),才会运行以下命令。

按照目前的编写方式,该脚本要求您位于包含该searxng-docker目录的目录中。否则,第二个命令将不会继续。

为了确保脚本可以独立于当前目录启动,请将相对路径更改searxng-docker为绝对路径(例如,/home/username/searxng-docker如果目录位于用户的主目录中usrname)。

在您的特定情况下,由于您更改目录以查找可执行文件,因此有一个更好的解决方案:用其绝对路径名替换直接启动可执行文件的整行:

#!/bin/sh
sudo /home/username/searxng-docker/docker-compose up -d

相关内容