在我的前同事处理用bash编写的项目时,我注意到所有.sh文件都只包含函数定义#!/bin/false
,据我所知,这是一种防止执行仅包含文件的安全机制.
例:
my_foo.sh
#!/bin/false function foo(){ echo foontastic }
my_script.sh
#!/bin/bash ./my_foo.sh # does nothing foo # error, no command named "foo" . ./my_foo.sh foo # prints "foontastic"
但是,当我不使用时#!/bin/false
,正确和不正确使用的效果完全相同:
例:
my_bar.sh
function bar(){ echo barvelous }
my_script.sh
#!/bin/bash ./my_bar.sh # spawn a subshell, defines bar and exit, effectively doing nothing bar # error, no command named "bar" . ./my_bar.sh bar # prints "barvelous"
由于source
在两种情况下正确使用这些脚本都可以按预期工作,并且在两种情况下执行它们都不会从父shell的角度执行任何操作并且不会生成有关无效使用的错误消息#!/bash/false
,这些脚本的目的究竟是什么?