Как Вы указываете альтернативные интерпретаторы сценария (хижины)?

Это происходит из-за установки загрузчика на potentially-multi-boot Карте памяти. Конфигурация Личинки для диска настраивается для начальной загрузки различных Ose непосредственно: это содержит записи как

menuentry "Ubuntu 10.10 Desktop ISO" {
 loopback loop /ubuntu.iso
 linux (loop)/casper/vmlinuz boot=casper iso-scan/filename=/ubuntu.iso noeject noprompt splash --
 initrd (loop)/casper/initrd.lz
}

Такая запись загружается непосредственно в обозначенную операционную систему, обходя загрузчик в ISO.

Я думаю, что было бы возможно переключиться на другой конфигурационный файл с configfile (loop)/path/to/grub.cfg, если загрузчиком в ISO является также Grub2 (который не так распространен на CD). Загрузка загрузчика в ISO была бы трудной, поскольку загрузчик должен будет понять, где найти его компоненты.

8
15.08.2012, 18:17
2 ответа

Короткий ответ - то, что Вы не можете.

Идея позади использования #!/usr/bin/env ruby вместо просто #!/usr/bin/ruby должен использовать любой рубиновый двоичный файл, является первым в пути пользователя. Затем Ваш сценарий не зависит от рубина, находящегося в том же месте в каждой системе; в конце концов, 'нормальное' рубиновое местоположение могло бы быть /usr/bin/ruby, /usr/local/bin/ruby, /opt/ruby-1.8.7/bin/ruby, и т.д...

Если Вы DID хочет к hardcode некоторые значения или делает некоторую ищущую логику, Вы могли бы всегда делать сценарий оболочки обертки:

#!/bin/sh

for ruby in /usr/bin/ruby /usr/local/bin/ruby
do
    if [ -x "$ruby" ]
    then
        "$ruby" myscript.rb
        break
    fi
done

И если Вы достаточно мотивированы, Вы могли бы даже встроить рубин (или другой) сценарий в сценарии оболочки.

6
27.01.2020, 20:12
  • 1
    Это имеет смысл. Я планирую запустить этот скрипт на нескольких машинах, каждая из которых имеет различный путь к Ruby 1.9, и они все не используют Ruby 1.9 в качестве интерпретатора по умолчанию. Я попытаюсь использовать сценарий обертки.Спасибо! –  sffc 15.08.2012, 18:43

Я собираюсь противоречить mrb и сказать, что можно сделать альтернативы, не изменяясь "#!" строка.

Предположим, что у Вас есть рубиновый сценарий с #!/usr/bin/env ruby как первая строка.

Вы хотите /path/to/better/ruby/version/whatever для запущения скрипта Вы устанавливаете переменную окружения PATH, чтобы иметь /path/to/better/ruby/version во-первых:

PATH=/path/to/better/ruby/version:$PATH  whatever_script_name_is

Вы хотите /usr/local/bin/ruby запускать скрипт? Установите ПУТЬ соответственно:

PATH=/usr/local/bin:$PATH  whatever_script_name_is

Обратите внимание, что игра с ПУТЕМ может вызвать другие проблемы в случае, что рубиновый исполняемый файл, Вы хотите запустить скрипт, находится в том же каталоге с другими альтернативными программами. Например, если /usr/local/bin имел BSD cat, grep, sed в нем, а также ruby, затем, когда Вы устанавливаете PATH=/usr/local/bin:$PATH Вы получите исполняемые файлы BSD вместо исполняемых файлов Linux. Это могло заключить проблему в корпус.

1
27.01.2020, 20:12

Теги

Похожие вопросы