Вот сценарий:
#!/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
работает как обычно?
Обновить. Наконец, он просто начал работать без какого-либо намеренного исправления с моей стороны.
#!
интерпретируется оболочкой, и если вы не укажете, какая оболочка вам нужна, -s SHELL
тогда это оболочка по умолчанию - /bin/false
в твоем случае. И false
не понял #!
синтаксис (по сути - не читаю вам сценарий вообще). Использовать -s /bin/sh
с su, и он будет работать так, как вы хотите.