dan*_*dan 21 script bash shell-script
我的 $HOME/bin 目录中有一堆手动执行的可执行脚本。有些是用 bash 编写的,有些是用 Ruby 编写的。它们都在顶部有一条 shebang 行,告诉 shell 使用什么解释器(在我的例子中是 bash 或 Ruby)。
我想知道是否最好在这些脚本上放置文件扩展名以指示它们是用什么脚本语言编写的?例如,Ruby 中的脚本具有 *.rb 后缀,而 bash 中的脚本具有 *.sh 后缀。
目前,这些脚本只有简单的名称,没有文件扩展名。
最佳做法是什么?
ktf*_*ktf 11
好吧 - 就像生活中的大多数事情一样:这取决于您的需求。
你说这些脚本驻留在一个 bin 目录中,我假设这些脚本是从命令行调用的。作为用户,如果我必须输入 bla.ksh 或 foo.bash,我认为这很烦人。此外,如果编码器决定转移到另一个解释器,命令名称也会改变,我将不得不修改其他使用这些工具的脚本 - 非常烦人,即使用户和编码器是同一个人。
但另一方面,我在项目构建目录中使用 .sh 或 .tcl 等扩展名。这样我就可以利用make功能将文件部署到它们的目标目录中 - 但在这个阶段我删除了文件后缀。
Jin*_*Jin 10
您可以执行通配符命令,ls *.rb或者cp *.sh如果您想在将来组织您的脚本。
在我看来,早点开始或晚点后悔。
类似的编辑器vim还可以根据shebang或文件扩展名应用正确的语法突出显示。
这也可以通过在各种编辑器中使用模式行来完成。例如对于 vim:
# vim: ft=sh
Run Code Online (Sandbox Code Playgroud)
小智 6
显然,bin目录中的可执行文件与可编辑的“源”文件之间存在一些差异。
#!行的低智能工具。.pm,.sh或.so。在编译程序的情况下,“源”和“可执行”之间的区别很明显:一个包含源代码,另一个包含机器语言或解释的字节码。在脚本的情况下,没有明显的区别,但是该make命令在“脚本的源代码”和“脚本的可执行版本”之间保持了概念上的分离:“shell 脚本”的默认“编译器”只是cp.
我建议保留一个单独的$HOME/source目录,或者:
ln -s ../source/foo.sh $HOME/bin/foo; 或者install -m 755 foo.sh ../bin/foo; 或者Makefile规则,以便复制源文件之前进行语法检查$HOME/source到$HOME/bin脚注:shell 脚本模块只能由另一个 shell 脚本使用,并使用.或source内置命令修改该脚本的内部上下文。这与可执行脚本不同,可执行脚本(与任何程序一样)作为单独的进程运行并且不能修改其父进程。作为一个粗略的约定,模块进入/usr/lib/name_of_program/name_of_module.sh而命令进入/usr/bin/name_of_command(没有任何后缀)。
| 归档时间: |
|
| 查看次数: |
14854 次 |
| 最近记录: |