Der Befehl im Skript schlägt mit der Fehlermeldung „Nicht gefunden“ fehl, wird aber in der Befehlszeile problemlos ausgeführt.

Der Befehl im Skript schlägt mit der Fehlermeldung „Nicht gefunden“ fehl, wird aber in der Befehlszeile problemlos ausgeführt.

Ich habe auf meinem eingebetteten ARM-Gerät eine minimale Umgebung erstellt, die nur aus dem Linux-Kernel besteht, und mit Busybox und einem minimalen Dateisystem in einem initrd-Image. Ich habe ein, inittabdas /etc/init.d/rcSbeim Start ausgeführt wird.

Bei mir steht folgende Zeile drin rcS:

/bin/mount -t proc none /proc

Wenn diese Zeile jedoch ausgeführt wird, erhalte ich

/etc/init.d/rcS: line 2: /bin/mount -t proc none /proc: not found

Die letzte Zeile rcSscheint ausgeführt zu werden – diese Zeile dient lediglich /bin/shdazu, eine Shell abzurufen, und die Shell wird automatisch geöffnet.

Wenn ich genau denselben Mount-Befehl von der Shell aus ausführe, funktioniert es. /bin/mountist ein symbolischer Link zu /bin/busybox.

Warum kann mein Skript nicht finden /bin/mount?

Antwort1

Wie sich herausstellte, waren die Leerzeichen in der Datei eigentlich zwei Zeichen 0xD0 0xA0(Unicode? Vielleicht ist es nur Zufall, dass diese wie 4 Bit nach links verschobene CR/LF aussehen ... Sie erscheinen auch als einzelnes Leerzeichen, nicht als zwei). Ein Hinweis war gleich zu Beginn die Fehlermeldung – es hätte nur der Befehl angezeigt werden sollen, nicht die Parameter, aber es gab keine Leerzeichen in der Zeile.

Als ich das entdeckte, wurde mir klar, was wahrscheinlich die Ursache war. Mein Betriebssystem ist Windows 7, ich verwende Ubuntu in einer VirtualBox-VM und verwende eine freigegebene Zwischenablage. Ich hatte das Skript von einer Webseite in Chrome unter Windows 7 kopiert und in gedit unter Ubuntu eingefügt. Entweder wurden diese Zeichen von der Webseite kopiert, oder auf dem Weg von der Seite zu gedit stimmte etwas mit der Kodierung nicht.

Das Ersetzen dieser durch Leerzeichen löste das Problem.

verwandte Informationen