为什么bash(.sh)脚本默认不可执行.
我同意,虽然我们touch在linux中的任何文件都是为了阅读而创建的.但是因为sh和csh等文件扩展名是出于执行目的.touch在可执行模式下对他们来说不是理想的.
问题可能听起来多余,但我还是想问它:)
最终这个问题的答案是,这不是touch设计目的.
事实上,touch甚至没有设计创建文件; 它的主要目的是改变文件时间戳.它只是这个目的的一个副作用,而且设计师决定更加慷慨并创建目标文件(如果它还没有提供-c)(如果你没有提供选项)这一事实,它允许你要创建文件.
还应该提到的是,还有其他技术可以创建文件,例如redirection(echo 'echo '\''I am a script.'\'';' >|script.sh;).文件创建的行为是通用的,文件的整个概念是通用的.文件只是一个字节流; 在文件抽象层中未指定字节流中的内容.正如@AdamGent所提到的,Windows要求某些类型的可执行文件具有某些扩展才能正确执行,但即使在Windows中,您也可以将可执行代码放入非可执行文件扩展文件中,并且可以将非可执行内容放入可执行文件扩展的文件.文件层没有强制执行文件名/文件内容对应.
所有这样说,这将经常是方便,如果你能很容易地创建在Unix系统中的脚本,自动具有执行权限.我实际上编写了一个脚本,允许我在vim中编辑一个新文件,然后在写入退出后将其权限设置为可执行文件.这种潜在的便利性尚未被标准化为公用事业的原因可能与对安全性的关注有关; 你不希望别人意外地使文件可执行,因为这会增加安全漏洞的风险.
您可以随时编写自己的程序来创建文件并使其可执行,可能基于文件名的扩展名.
这里可以添加的另一件事是,即使shell脚本也不总是需要可执行的.例如,如果您编写的脚本仅用于从现有shell进程(通过source或经典.内置函数)获取,则该脚本根本不需要是可执行的.因此,在某些情况下,文件扩展名本身不能提供足够的信息来确定文件的适当权限.
| 归档时间: |
|
| 查看次数: |
1577 次 |
| 最近记录: |