Полное раскрытие: я действительно не знаю Ruby. Я в основном притворяюсь.Ruby обрабатывает мою переменную как комментарий
У меня есть сценарий, который я хочу использовать для сбора инвентаря в Casper, который я использую для управления связкой Mac. Я пытаюсь передать переменную в команду оболочки с %x
. Проблема в том, что Ruby обрабатывает переменную как комментарий вместо этого. Вот соответствующий код:
def get_host
host=%x(/usr/sbin/dsconfigad -show | /usr/bin/awk '/Computer Account/ {print $4}').chomp
raise Error, "this machine must not be bound to AD.\n try again." if host == nil
end
def get_ou
host = get_host
dsout = %x(/usr/bin/dscl /Search -read /Computers/#{host}).to_a
ou = dsout.select {|item| item =~ /OU=/}.to_s.split(",")[1].to_s.gsub(/OU=/, '').chomp
end
Я попытался с помощью клещей назад вместо %x
, но получил тот же результат. Команда должна вернуть кучу информации о хосте, на котором она запущена, но вместо этого возвращает результат dscl /Search -read /Computers
, который всегда name: dsRecTypeStandard:Computers
.
Как я могу выполнить то, что хочу?
Вы уверены, что 'get_host' не возвращает пустую строку? Выполнение кода в вашем методе 'get_host' на моем Mac дает мне' '' '(предоставлено, мой компьютер не является частью домена, но он возвращает пустую строку вместо повышения ошибки) –
Да, это странно. Ну, когда я запускаю его на Mac, который находится в нашем AD, и добавьте 'puts # {host}' в этот метод, он возвращает имя хоста AD хоста. Поэтому я уверен, что работает, хотя было бы неплохо узнать, почему это не ошибка. –