
Я создал минимальную среду на моем встроенном устройстве ARM, состоящую только из ядра Linux, с Busybox и минимальной файловой системой в образе initrd. У меня есть , inittab
который запускается /etc/init.d/rcS
при запуске.
У меня есть следующая строка rcS
:
/bin/mount -t proc none /proc
Однако, когда эта строка проходит, я получаю
/etc/init.d/rcS: line 2: /bin/mount -t proc none /proc: not found
Последняя строка, rcS
по-видимому, выполняется — эта строка просто /bin/sh
получает оболочку, и оболочка открывается автоматически.
Когда я запускаю ту же самую команду монтирования из оболочки, она работает. /bin/mount
— это символическая ссылка на /bin/busybox
.
Почему мой скрипт не может найти /bin/mount
?
решение1
Как оказалось, пробелы в файле на самом деле были двумя символами 0xD0 0xA0
(Unicode? Может быть, это просто совпадение, что они выглядят как CR/LF, сдвинутые влево на 4 бита... Они также отображаются как один пустой символ, а не два). Подсказкой с самого начала стало сообщение об ошибке — оно должно было отображать только команду, а не параметры, но в строке не было ни одного пробела.
Как только я это обнаружил, я понял, в чем, вероятно, причина. Моя ОС — Windows 7, и я запускаю Ubuntu в виртуальной машине VirtualBox, и я использую общий буфер обмена. Я скопировал скрипт с веб-страницы в Chrome на Windows 7 и вставил его в gedit на Ubuntu. Либо эти символы были скопированы с веб-страницы, либо что-то не так с кодировкой на пути от страницы к gedit.
Замена их на пробелы решила проблему.