这是脚本:
#!/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忽略了脚本中的解释行,而在root下munin往常一样工作?
更新 。 最后,它开始工作,没有任何有意的修复。
#! 由shell解释,如果你没有指定你需要的shell,那么它就是默认的shell – /bin/false 。 而false不明白#! 语法(实际上 – 根本不读你的脚本)。 和su一起使用-s /bin/sh ,它会按你的意思工作。