![#! 不会让 Linux 运行解释器](https://linux22.com/image/608553/%23!%20%E4%B8%8D%E4%BC%9A%E8%AE%A9%20Linux%20%E8%BF%90%E8%A1%8C%E8%A7%A3%E9%87%8A%E5%99%A8.png)
脚本如下:
#!/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
它下却正常工作?
更新。最后它就开始工作了,不需要我刻意修复。
答案1
#!
由 shell 解释,如果您未指定所需的 shell,则-s SHELL
它是默认 shell -/bin/false
在您的情况下。并且false
不理解#!
语法(事实上 - 根本不读您的脚本)。-s /bin/sh
与 su 一起使用,它将按您想要的方式工作。