C++Guns – RoboBlog

08.02.2018

line 1: #!/bin/bash: No such file or directory

Filed under: Allgemein — Tags: — Thomas @ 12:02

$ ./test.sh 
./test.sh: line 1: #!/bin/bash: No such file or directory
$ cat test.sh
#!/bin/bash
$ ll /bin/bash 
-rwxr-xr-x 1 root root 1.1M May 15  2017 /bin/bash

WTF?! Wo ist der Fehler? Ein Blick mit dem hexeditor zeigt seltsame Zeichen am Dateianfang, die im Texteditor nicht sichtbar sind.


$ head -n 1 test.sh | hexdump -C
00000000  ef bb bf 23 21 2f 62 69  6e 2f 62 61 73 68 0a     |...#!/bin/bash.|

Die Hex Zeichenfolge ef bb bf ist ein BOM (Byte order mark) und steht in diesem Fall für die Codierung einer UTF8 Datei. Diese wurde wohl automatisch in die Datei eingefügt. Nur ist Unix älter als Unicode und damals hat sich wirklich keiner dafür interessiert, so dass BOM beim interpretieren der Shellskripte nicht mit interpretiert wird. Braucht man dort auch wirklich nicht.

Leider haben die Unicode Leute nichts seit 1960 gelernt und packen wieder Kontrollzeichen in Plaintext Dateien rein. Mit dem Ergebnis, dass alles inkompatibel bleibt. Plaintext - Klartext, nimm es wörtlich. Für alle die es vergessen haben: Mit plain text (engl. für einfacher, schlichter Text) werden Daten bezeichnet, die direkt unter Verwendung einer Zeichenkodierung in Text umgesetzt werden können. Dies ist mit BOM nicht der Fall. Fail.

Mit vim bekommt man die BOM Bombe leicht wieder weg:


:set nobomb
:wq

$ head -n 1 test.sh | hexdump -C
00000000  23 21 2f 62 69 6e 2f 62  61 73 68 0a              |#!/bin/bash.|
$ ./test.sh 
$

No Comments

No comments yet.

RSS feed for comments on this post.

Sorry, the comment form is closed at this time.

Powered by WordPress