我最近养成了编程的习惯。我看到这个教程让我使用一个名为 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
在讨论您的具体情况之前,首先进行一般性解释。此命令将首先更改目录(cd
至searxng-docker
)。只有成功后(&&
),才会运行以下命令。
按照目前的编写方式,该脚本要求您位于包含该searxng-docker
目录的目录中。否则,第二个命令将不会继续。
为了确保脚本可以独立于当前目录启动,请将相对路径更改searxng-docker
为绝对路径(例如,/home/username/searxng-docker
如果目录位于用户的主目录中usrname
)。
在您的特定情况下,由于您更改目录以查找可执行文件,因此有一个更好的解决方案:用其绝对路径名替换直接启动可执行文件的整行:
#!/bin/sh
sudo /home/username/searxng-docker/docker-compose up -d