如何执行 bash 脚本?

And*_*rew 18 linux bash command-line

所以我写了我的第一个 bash 脚本:

#!/bin/bash
echo 'hello world!'
exit
Run Code Online (Sandbox Code Playgroud)

我知道它有正确的 bash 位置并且是可执行的:

$ which bash
/bin/bash
$ chmod +x myscript.sh
Run Code Online (Sandbox Code Playgroud)

现在我想从命令行运行它,但出现错误:

$ myscript.sh
myscript.sh: command not found
Run Code Online (Sandbox Code Playgroud)

所以我改为尝试这个并且它有效:

$ bash myscript.sh
hello world!
Run Code Online (Sandbox Code Playgroud)

这是我总是需要执行它的方式吗?我觉得我已经执行了其他脚本而不必在它之前加上bash. 如何运行 myscript.sh 而不必在它前面加上bash

更新:这里很好地解释了为什么以及如何执行 bash 脚本

pup*_*eno 28

您必须使文件可执行。你可以这样做

chmod +x <filename>
Run Code Online (Sandbox Code Playgroud)

你的脚本的名字在哪里,然后你必须在它前面加上它./来指示 shell 在本地目录中运行一个文件,比如:

./script.sh
Run Code Online (Sandbox Code Playgroud)

您只能运行在您的文件中PATH或您指定了它们的路径的文件。./,本地目录,PATH默认情况下不在 中,因为有人可能将其用于恶意目的。想象一下,ls在一个目录中放置了一个名为的脚本,您进入该目录,运行ls该脚本,然后该脚本做了一些不好的事情。

当您使用它时,您可能希望通过使用以下命令运行 shell 而不是 bash 来使其更便携:

#!/bin/sh
Run Code Online (Sandbox Code Playgroud)

或者无论安装在哪里都运行 bash,只要安装了它:

#!/usr/bin/env bash
Run Code Online (Sandbox Code Playgroud)