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


66

我有一些功能脚本,我想复制到/usr/bin这些脚本中,以用作普通的终端命令。将它们与.sh扩展程序一起使用是一种好习惯,还是可以不带扩展名保存它们?


6
另外,如果您希望所有用户都可以使用这些脚本,则/usr/local/bin可能是一个更好的选择。
塞勒姆2014年

6
@Salem /usr/bin/usr/local/bin都应该是提供给所有用户,但/usr/local/bin对于那些不是包的一部分可执行文件更好。
格里特2014年

我看到的唯一好处是,vim或nano之类的编辑器从一开始就知道如何突出显示内容,仅此而已。
rath 2014年

1
如果将shebang设置为#!/usr/bin/env bash或,则@rath会得到语法高亮显示而没有扩展名#!/bin/bash
Sparhawk

@Sparhawk的确如此,但是直到我尝试运行脚本之前,我经常忘记它;)
rath 2014年

Answers:


71

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

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

附注:您不必将脚本放入/bin。您可以创建目录~/bin并将脚本放在此处。默认情况下~/bin包含目录$PATH,因此放置在该目录中的脚本可以像其他任何shell命令一样运行。


4
$PATH默认情况下包含目录〜/ bin ” -自何时起?无论如何,~/.local/bin因为它是标准,所以可能是一个更好的选择。
nyuszika7h 2014年

1
您的意思是“库必须具有.so扩展名”,对吗?不嘘。
Keith Wolters 2014年

3
@KeithWolters首先,不是我,而是Google。其次,.sh,而不是.so,我们谈论的是shell脚本,而不是二进制文件。

1
Google风格指南非常针对Google。例如,“ Bash是可执行文件唯一允许使用的Shell脚本语言。” 显然是内部规则,而不是最佳做法。
Paul Draper 2014年

1
@ nyuszika7h签出〜/ .profile ...如果目录存在,它将$ HOME / bin插入到您的路径中
Corey Goldberg 2016年

9

正如Sergey所说,我第二次使用的建议~/bin会自动添加到您的建议中。或者,可能已经在。然而:$PATH/usr/local/binPATH

  • 您正在为此做自己。使用任何您认为合适的东西。确实,我会说保留扩展名,以便提醒您它是您正在运行的脚本,因为-
  • 扩展名在中不常见/usr/bin。在我的系统中,我只能找到两个:

    $ dpkg -S `ls /usr/bin/*.sh`
    mtools: /usr/bin/amuFormat.sh
    gettext-base: /usr/bin/gettext.sh

    因此,如果要包装,请绝对不要使用扩展名。


2
~/bin已添加到$PATH自动添加(如果存在),而无需手动添加。只要创建目录,注销并重新登录。
谢尔盖·

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.