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

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

我有一些功能脚本,我想复制到/usr/bin我想将它们用作普通终端命令。使用扩展程序是否是一种好习惯.sh,或者我可以不使用扩展程序保存它们吗?

答案1

不,这不是一个好的做法,你应该保持你的脚本没有扩展名。请注意,作为包一部分的脚本没有扩展名.sh扩展,即更新 grub, 不是更新grub.sh。如果你仍然不相信,那么请注意,Google Shell 样式指南说:

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

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

答案2

我赞同使用~/bin自动添加到您的$PATH,as 的建议谢尔盖说道。或者/usr/local/bin,可能已经在了PATH。然而:

  • 你这样做是为了你自己。使用任何你觉得舒服的东西。事实上,我会建议保留扩展,这样你就会记住你正在运行的是你的脚本,因为 -
  • 扩展在 中并不常见/usr/bin。在我的系统中,我只能找到两个:

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

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

答案3

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

#!/bin/bash

因此该文件将自动输入:Shell 脚本无需任何扩展!

记得给予文件执行权限。

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

答案4

您的脚本和运行它们的命令不需要具有相同的名称

我同意这里其他答案的意见和建议,即输入的命令不应该有扩展名(mycmd,而不是mycmd.sh),并且编辑器应该能够从shebang行中识别文件内容(例如#!/bin/bash)。

但是,如果脚本是更大项目的一部分,我发现在脚本上使用文件扩展名很有用,可以提醒自己 repo 中的文件是否可编辑(例如脚本、源代码)或编译的二进制文件。

为了实现这两个目标,你可以从 PATH 目录中符号链接你的脚本. 例如,如果~/.local/bin位于您的 PATH 上:

cd ~/.local/bin
ln -s ../../path/to/code/project/src/mycmd.sh mycmd

# now mycmd is on the PATH, and calling mycmd runs the script mycmd.sh
cd somewhere/else
mycmd

这还允许您从进行版本控制~/path/to/code/project/,而无需在执行“发布”时将文件复制到 PATH 上的目录中。

相关内容