.sh 文件需要 `sh app.sh` 即使有 `#!/bin/bash` 行

Jie*_*eng 7 bash

我的印象是,如果我包括这条线

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

在我的文件的开头,它会被识别为一个我可以运行的 bash 脚本

file.sh
Run Code Online (Sandbox Code Playgroud)

代替

sh file.sh
Run Code Online (Sandbox Code Playgroud)

但在我的情况下,file.sh给出类似test.sh给出的东西test.sh: command not found。这是为什么?

更新

我注意到我需要使用./. 但我认为它会在当前目录中查找?

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

fra*_*ous 13

首先,您需要确保文件是可执行的:

chmod +x file.sh

然后要运行它,您要么需要将它放在 PATH 中,即操作系统在查找要运行的文件时搜索的文件目录之一,您可以使用 找到它echo $PATH,否则您需要输入:

./file.sh

而不仅仅是键入file.sh.

你可以输入file.sh,如果它在你的 PATH 中,这是我推荐的。一个好地方在~/bin。如果该文件夹不存在,请创建该文件夹,在 Ubuntu 下,它会在您登录时添加到您的路径中。


use*_*own 5

您需要使用 ./file.sh 启动它,因为当前目录不在 PATH 中。

如果这还不够,becaused你错过了,frabjous暗示什么,chmod a+x你应该开始一个家当开始计划#!/bin/bash

bash file.sh
Run Code Online (Sandbox Code Playgroud)

不是

sh file.sh
Run Code Online (Sandbox Code Playgroud)

即使 sh 是 /bin/bash 的符号链接。

shell 检查它是如何被调用的,并且可以被调用为sh以兼容模式运行,因此它可能无法处理一些 bashisms,如果作为bash file.sh.

那不是你的问题,但如果你不知道这些微妙的区别,可能会成为一个问题。