Выполнение bash скрипта при переходе в chroot [РЕШЕНО]
MVG 23 ноября, 2008 - 20:44
Доброго времени суток, господа.
Подскажите пожалуйста, как обойти проблему:
Нужен скрипт, который при запуске переходит в chroot окружение
и разбирает при помощи awk вывод некой программы, выводя только определенное поле.
Для примера, написал такой скрипт:
Цитата:
exec chroot /mnt/epia/source /bin/sh <<- EOF
env-update
source /etc/profile
cd /bin
ls -l | awk '{print $8}'
exit
EOF
При запуска, после awk, вместо восьмой колонки получаю полный вывод всех колонок, то есть awk ничего не парсит.
Если перейти в chroot и запустить ls -l | awk '{print $8}' руками - все работает.
Может быть с переменными окружения что-то надо сделать?
Посоветуйте, в какую сторону копать :)
»
- Для комментирования войдите или зарегистрируйтесь
re
Тебе нужны два скрипта: первый для перехода в chroot, второй - для выполнения нужных тебе действий в новой среде. Потому, что при изменении корня (chroot) команды выполняются уже не тем shell'ом которому ты отдал скрипт, а тем который ты указал в параметре команды. В твоём примере это /mnt/epia/source/bin/sh
В первом скрипте сделай так
Во второй_скрипт пиши то, что хочешь сделать в croot'e
____________
Экономь электроэнергию! Выключи NumLock!
Спасибо за ответ. Примерно
Спасибо за ответ. Примерно так я и рассуждал. Чтобы не плодить файлы, решил создать второй скрипт в chroot при помощи вывода cat из первого. Примерно так:
Оказалось, что второй скрипт не работает тоже! Начал разбираться, и оказалось,
что в конструкции awk '{print $3}' второго скрипта исчез параметр $3.
Быстро набросал такой пример:
и оказалось, что и здесь пропал $3. Видимо в этом случае происходит подстановка переменной,
а так как такой переменной нет, то вместо нее подставляется пустое значение.
Видимо здесь необходим какой-то специфичный прием или экранирование?
Если это победить, думаю и первоначальный вариант запуска в chroot будет работать тоже.
cat >> test
cat >> test << EOF
ls -l | awk '{print $3}'
EOF
А долар кто за вас эскейпить будет?
'{print \$3}'
Некому, придется самому как
Некому, придется самому как нибудь :) .
Спасибо за ответ, это оказалось действительно из за экранирования символов. Собственно, уже сам разобрался. Написал все, что хотел, прекрасно работает через chroot. Скрипт этот занимается тем, что собирает initrd образ из неродной файловой системы. Связано это с тем, что на домашней машине установлена система x86_64, а мне необходимо создать систему для загрузки с ide flash для архитектуры i586 со специфичными набором софта и оптимизациями (VIA Epia ME6000). Соответственно initrd должен собираться в chroot, а делать это рукам очень неудобно.
Всем большое спасибо, тема закрыта, проблема решена.
>>Нужен скрипт, который при
>>Нужен скрипт, который при запуске переходит в chroot окружение
и разбирает при помощи awk вывод некой программы, выводя только определенное поле.
Для примера, написал такой скрипт..
Вопрос в другом. Есть ли насущная необходимость в сшрут чтоб разобрать текст? Что мешает разобрать его там, где лежит?
то, что текст выдает некая
то, что текст выдает некая программа, к которой нет доверия и не хочется пускать её в основную среду. Или может быть она требует специфичных библиотек и организации файлов в системе, конфликтует с другими пакетами. причин может быть масса.