为什么默认情况下 bash(.sh) 脚本不可执行。
我同意,虽然我们touch
linux 中的任何文件都是为了阅读目的而创建的。
但是由于 sh 和 csh 等文件扩展名是用于执行目的。
在可执行模式下 touch
它们不是很理想吗?
这个问题听起来有些多余,但我还是想问一下:)
最佳答案
这个问题的最终答案是,这不是 touch
设计的目的。
事实上,touch
甚至不是为了创建文件而设计的;它在生活中的主要目的是更改文件时间戳。这只是该目的的副作用,事实上,设计师决定更慷慨一点,如果目标文件不存在(并且如果您没有提供 -c
选项),它允许您创建文件。
还需要提到的是,还有其他创建文件的技术,比如重定向(echo 'echo '\''我是脚本。'\'';' >|script.sh;
)。创建文件的行为是通用的,文件的整个概念也是通用的。一个文件就是一个字节流;文件抽象层未指定字节流中的内容。正如@AdamGent 提到的,Windows 要求某些类型的可执行文件具有某些扩展名才能正确执行,但即使在 Windows 中,您也可以将可执行代码放在非可执行扩展文件中,并且您可以将不可执行内容放在可执行扩展文件。在文件层没有强制执行文件名/文件内容对应。
综上所述,如果您可以轻松地在 Unix 中创建自动设置可执行权限集的脚本, 通常会很方便。我实际上已经编写了一个脚本,允许我在 vim 中编辑一个新文件,然后在写入退出后将其权限设置为可执行。这种潜在的便利性尚未标准化为实用程序的原因可能与对安全性的担忧有关;您不希望人们不小心使文件可执行,因为这会增加安全漏洞的风险。
您始终可以编写自己的程序来创建文件并使其可执行,也许基于文件名的扩展名。
这里可以添加的另一件事是,即使是 shell 脚本也不一定总是可执行的。例如,如果您编写的脚本仅打算从现有的 shell 进程获取(通过 source
或经典的 .
内置函数),则脚本不需要完全可以执行。因此,在某些情况下,文件扩展名本身无法提供足够的信息来确定文件的适当权限。
关于linux - 为什么默认情况下 bash(.sh) 脚本不可执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28598635/