因此我编写了我的第一个 bash 脚本:
#!/bin/bash
echo 'hello world!'
exit
我知道它具有正确的 bash 位置并且可以执行:
$ which bash
/bin/bash
$ chmod +x myscript.sh
现在我想从命令行运行它,但出现错误:
$ myscript.sh
myscript.sh: command not found
因此我尝试了这个并且它有效:
$ bash myscript.sh
hello world!
我是不是总是需要这样执行它?我觉得我执行过其他脚本,而不必在它前面加上bash
。我怎样才能运行 myscript.sh 而不必在它前面加上bash
?
更新:这是很好的解释为何以及如何执行 bash 脚本。
答案1
您必须使文件可执行。您可以使用
chmod +x <filename>
其中是您的脚本的名称,然后您必须在其前面添加以./
指示 shell 运行本地目录中的文件,例如:
./script.sh
您只能运行位于 中的文件PATH
或您指定了路径的文件。默认情况下./
,本地目录不位于 中,PATH
因为有人可能会将其用于恶意目的。想象一下,一个名为 的脚本ls
被放在一个目录中,您进入该目录,运行该脚本ls
,然后该脚本会做一些坏事。
当你这样做时,你可能希望通过运行 shell 而不是 bash 来使其更具可移植性,方法是使用:
#!/bin/sh
或者通过运行 bash 不管它安装在哪里只要它被安装了:
#!/usr/bin/env bash
答案2
除了费尔南德斯的建议外,还要加上一点,例如:
./myscript.sh
出于安全原因,当前目录永远不会包含在执行路径中。
答案3
有 3 种方法可以执行 bash 脚本。以 myscript.sh 作为要执行的脚本为例。
方法 1
将脚本作为子进程执行,如果没有写入所有者,则将触发权限问题。您可以通过 chmod 更改权限。
$ chmod + x myscript.sh
$ ./myscript.sh
方法 2
以当前用户身份运行该脚本。如果 bash 脚本写得好,它就不会有错误。
$ bash myscript.sh
方法 3
与方法 2 类似,但是一种捷径。请注意,这是基于您在当前会话中使用 bash shell 的假设。
$。我的脚本
希望这可以帮助!:)