你如何为bash文件的结尾添加后缀?

时间:2014-04-18 18:36:51

标签: bash

我知道这可能是我的愚蠢,但这就是我对此感到困惑的事情:

  1. 文件末尾调用的后缀是什么? 即。 .txt,.php,.html等

  2. bash文件使用什么后缀? .bash?

  3. 感谢帮助我的愚蠢不再存在。

4 个答案:

答案 0 :(得分:3)

这些称为文件扩展名。按照惯例,包含Bash脚本的shell脚本获得.sh扩展名(用于“SHell脚本”)。

请注意,这不是脚本执行的必要条件。您可以将其关闭,或者为其提供不同的文件扩展名(例如,对于默认的Bash初始化脚本,例如.bashrc),它仍然会运行所有相同的。

答案 1 :(得分:2)

在unixoid系统上(例如GNU / Linux)这样的"文件扩展名" (或名称后缀)远不如其他系统重要。这是因为文件的类型是根据更强大的策略确定的,并且还取决于文件的实际内容,这显然是有意义的......

按照惯例,shell脚本通常会得到一个" .sh"延伸或根本没有。

在大多数情况下,没有任何扩展更有意义,因为它更方便:如果脚本有一个" shebang"在第一行(#!/bin/bash)。在这种情况下,您只需通过其名称(文件路径)调用此类脚本,而无需指定解释器来打开它(shell)。所需要的只是将执行权限(" x-bit")授予存储在unixoid系统上的文件系统内的文件。因此,当文件位于> /path/to/script环境变量的文件夹中时,这样的文件可以通过简单方便的> script或甚至只是名称(PATH)来执行。

答案 2 :(得分:1)

在Unix上,后缀可以是你想要的任何东西。

与Windows不同,文件的后缀不会决定运行它的程序。相反,Unix使用shebang。脚本的第一行将包含#!,后跟要使用的处理器的名称:

#! /usr/bash    # Will execute with the default BASH shell

有时,你会看到:

#! /usr/bin/env foo

这是一个特殊的技巧,如果foo在您的路径中,/usr/bin/env foo将在您的路径中使用foo的版本。例如,我安装了6个Perls,我选择通过$PATH安装哪个。我把它放在我的所有Perl脚本中:

#! /usr/bin/env perl

并且,它将使用正确版本的Perl执行。


现在是一个完全矛盾的陈述......

在Unix命令行中,使用标准的Unix shell,使用上面提到的 shebang 。这可能是也可能不是许多Unix系统上的图形管理器的情况。例如,Mac OS X(是的,那是Unix)Finder确实使用后缀来确定用于打开文件的默认程序(虽然这可以基于每个文件覆盖)。

在Linux上,Gnome Files(正式名称为Nautilus)也使用文件后缀。我不知道Konqueror(KDE文件浏览器)做了什么。但是,可以根据您的需要为您修改这些内容。再说一遍,没有正式名单。

也就是说,大多数人使用.sh来表示任何shell脚本 - 特别是那些Bourne风格的shell脚本语言,如BASH,Kornshell,Zsh,Ash,Dash,当然还有Bourne shell。有时人们会使用.bash.ksh.zsh,但这种情况很少见。

答案 3 :(得分:1)

有些人(很多人)做了什么,无缘无故我理解:他们将.sh扩展名提供给 bash 脚本。令人困惑的是:.sh应该用于sh脚本。

事实上,我们真的关心可执行文件的扩展吗?最终用户真的关心脚本是用Bash,Perl还是Python?二进制可执行文件是否具有.elf扩展名?

让我引用Lhunath和GreyCat关于此的优秀Bash Guide

  

另外,请不要给你的脚本提供愚蠢的.sh扩展名。它没有任何意义,而且完全具有误导性(因为它将成为一个bash脚本,而不是一个sh脚本)。

为了好玩,您可以尝试在系统上找到Bash中的一些脚本:

file /bin/* | grep Bourne

在我的系统上,我有这些:

/bin/gunzip:                  Bourne-Again shell script, ASCII text executable
/bin/gzexe:                   Bourne-Again shell script, ASCII text executable
/bin/init-checkconf:          Bourne-Again shell script, ASCII text executable
/bin/uncompress:              Bourne-Again shell script, ASCII text executable
/bin/zcat:                    Bourne-Again shell script, ASCII text executable
/bin/zcmp:                    Bourne-Again shell script, ASCII text executable
/bin/zdiff:                   Bourne-Again shell script, ASCII text executable
/bin/zegrep:                  Bourne-Again shell script, ASCII text executable
/bin/zfgrep:                  Bourne-Again shell script, ASCII text executable
/bin/zforce:                  Bourne-Again shell script, ASCII text executable
/bin/zgrep:                   Bourne-Again shell script, ASCII text executable
/bin/zless:                   Bourne-Again shell script, ASCII text executable
/bin/zmore:                   Bourne-Again shell script, ASCII text executable
/bin/znew:                    Bourne-Again shell script, ASCII text executable

如您所见,它们根本没有扩展名!