我应该使用 .sh 扩展名保存我的脚本吗?

Pat*_*son 74 scripts

我有一些功能脚本,我想复制到/usr/bin我想将它们用作普通终端命令。将它们与.sh扩展一起使用是一个好习惯还是我可以在没有扩展的情况下保存它们?

小智 79

不,这不是一个好习惯,您应该保留没有扩展名的脚本。请注意,作为包一部分的脚本没有.sh扩展名,即update-grub,而不是update-grub.sh。如果您仍然不相信,那么请注意,Google Shell 样式指南说:

可执行文件不应有扩展名(强烈推荐)或 .sh 扩展名。库必须具有 .sh 扩展名,并且不应是可执行的。

PS 您不必将脚本放入/bin. 您可以创建目录~/bin并将脚本放在那里。目录默认~/bin包含在其中$PATH,因此放置在那里的脚本可以像任何其他 shell 命令一样运行。

  • Google 风格指南是专门针对 Google 的。例如,“Bash 是唯一允许执行可执行文件的 shell 脚本语言。” 显然是内部规则而不是最佳实践。 (5认同)
  • *“默认情况下,目录 ~/bin 包含在 `$PATH` 中”* - 从什么时候开始?无论如何,`~/.local/bin` 可能是一个更好的选择,因为它是一个标准。 (4认同)
  • @KeithWolters 首先,不是我,而是谷歌。其次,.sh,而不是 .so,我们谈论的是 shell 脚本,而不是二进制文件。 (4认同)
  • @nyuszika7h 查看 ~/.profile...如果目录存在,它将 $HOME/bin 插入到您的路径中 (2认同)
  • @BobStein 请参阅 https://www.talisman.org/~erlkonig/documents/commandname-extensions-considered-harmful/,以及有关该主题的 freenode #bash 频道事实的历史 http://wooledge.org/~greybot /元/.sh (2认同)

mur*_*uru 10

正如谢尔盖所说,我建议使用~/bin它会自动添加到您的. 或者,这可能已经在. 然而:$PATH/usr/local/binPATH

  • 你这样做是为了自己。使用任何你觉得舒服的东西。确实,我会说保留扩展名,以便提醒您这是您正在运行的脚本,因为 -
  • 扩展在/usr/bin. 在我的系统中,我只能找到两个:

    $ dpkg -S `ls /usr/bin/*.sh`
    mtools: /usr/bin/amuFormat.sh
    gettext-base: /usr/bin/gettext.sh
    
    Run Code Online (Sandbox Code Playgroud)

    因此,如果您要打包,请务必省略扩展名。

  • `~/bin` 会自动添加到 `$PATH` 中(如果存在),无需手动添加。只需创建目录,注销并重新登录即可。 (2认同)

Pan*_*dya 6

只需将以下行放在文件顶部:

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

因此,该文件将自动键入:没有任何扩展名的Shell 脚本

记得给文件执行权限。

要放置可以通过直接命令运行的脚本,请访问:我应该将脚本放在哪里,以便我可以通过直接命令运行它?

  • 或者甚至只是 #!/bin/sh 如果您不需要完整的 bash shell。 (2认同)