Bash 脚本文件扩展名

jul*_*old 3 command-line bash scripts

我有一个服务器,里面有不同类型的脚本。

这些脚本将使用不同的 shell 打开,例如:

sh ./do_one_thing.sh
bash ./do_another_thing.sh
Run Code Online (Sandbox Code Playgroud)

.sh扩展对我来说很危险,特别是如果我很长时间没有连接到服务器的话。或者如果有不熟悉的人需要替身。
我可能会不小心执行sh ./do_another_thing.sh

如果我命名我的脚本会有什么不同吗do_another_thing.bash?这将创造又一层的万无一失。

另外,我想知道开头的 shebang 行除了提醒管理员 ( #!/bin/bash) 之外还有什么用处(如果它被覆盖的sh ./do_another_thing.sh话)。在我看来,必须有一种更合适的方法来执行脚本,识别 shebang。

typ*_*sto 8

文件顶部的 shebang 定义了运行时运行的解释器./name_of_file(假设它是可执行的)。

#!/bin/cat
test 123
Run Code Online (Sandbox Code Playgroud)

当您使用 运行它时,将简单地打印上面的文件./name_of_file,因为它将运行cat name_of_file

#!/bin/echo
hello, world
Run Code Online (Sandbox Code Playgroud)

只会打印name_of_file,因为它会运行echo name_of_file

将其设置为 bash 或 sh 将允许您选择它运行的解释器,只要您记得使用./name_of_file.

话虽如此,使用.shfor sh 和.bashfor bash 效果很好,尽管不是标准的。文件扩展名在 Linux 上相当灵活。


Nma*_*ath 5

shebang 行定义了解释器,在本例中为/bin/bash。如果您总是要对单个脚本使用相同的解释器,那么您可以在此处定义它,这样您就不必在命令中定义它。使用 shebang 定义您不想用于该脚本的解释器是没有意义的。

我真的不明白为什么一个扩展程序比另一个扩展程序更危险,或者您如何意外地输入所有这些内容。如果您使用制表符完成,则任一扩展都会自动完成,因此这并不能防止笨拙。该扩展名很有帮助,因此您可以识别/记住它是什么类型的文件。

无论如何,脚本的名称并不重要。它甚至不需要扩展。

关于Unix&Linux有一个很好的问题,其中提供了有关此的更多信息。