#! 不会让linux运行一个解释器

这是脚本

#!/usr/bin/env ruby CODES = {} puts "ok" 

root用户下一切都很好:

 # ./test.rb ok 

munin的默认解释器是/bin/false什么都不起作用:

 # su munin -c ./test.rb 

当默认解释器是/bin/sh ,它总是被使用:

 # su munin -c ./test.rb ./test.rb: line 3: CODES: command not found 

为什么在munin用户下,Linux忽略了脚本中的解释行,而在rootmunin往常一样工作?

更新 。 最后,它开始工作,没有任何有意的修复。

#! 由shell解释,如果你没有指定你需要的shell,那么它就是默认的shell – /bin/false 。 而false不明白#! 语法(实际上 – 根本不读你的脚本)。 和su一起使用-s /bin/sh ,它会按你的意思工作。