так что... решение вашего вопроса возможно на 100%, и (в контекстеmake
)важно.
Я столкнулся с этим в make-файле, и учитывая сложность вложения команд bash в make-файл, который уже использует $(...)
для вызова переменных, приятно иметь возможность делать именно то, о чем вы спрашиваете.
Вместо использования eval
просто используйте awk
или perl
системную команду:
// command_list.sh:
echo "1"
echo "2"
echo "3"
// command line prompt:
$: cat command_list.sh | awk '{system($0)}'
1
2
3
А, командный пункт:
// a readable version--rather than building up an awk miniprogram,
// split into logical blocks:
$: cat inputs.txt | awk '{print "building "$1" command "$2" here "}' | awk '{system($0)}'
Chroot жалуется, что не может найти/bin/bash
внутри окружения chroot, поэтому не может отправить вас туда в оболочке. Смонтируйте свое устройство, затем загляните внутрь:
# mount /dev/md127 /mnt/
# ls /mnt/bin/bash
Если я правильно угадал, это ничего не покажет. Если в вашем chroot есть действующая оболочка, вы можете изменить переменную среды SHELL. Например, если bash находится по адресу (/mnt )/usr/bin/bash:
# SHELL=/usr/bin/bash chroot /mnt
(Ищите ш, кш, тире...)
Но вам, вероятно, даже оболочка не нужна. Вы можете указать команду для запуска непосредственно при chroot.
# chroot /mnt passwd
Подробнее см. man chroot
.
Кроме того, для смены пароля он вам, вероятно, не понадобится, но при chroot-окружении в целях отладки (например, если ваша система не загружается )вам обычно приходится привязывать несколько путей, таких как /dev, / dev/tty, /sys и /proc. Например mount -o bind /dev /mnt/dev
. Таким образом, программы могут получать доступ к вашим устройствам, обрабатывать информацию и т. д., находясь в chroot-окружении.