我有一些功能脚本,我想复制到/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 上的目录中。