ubuntuusers.de

shell/bash Problem: 6: Bad substitution

Status: Gelöst | Ubuntu-Version: Ubuntu 10.04 (Lucid Lynx)
Antworten |

gma

Anmeldungsdatum:
7. August 2007

Beiträge: Zähle...

Hallo,

ich versuche gerade ein sh-Skript unter Ubuntu 10.04 zum Laufen zu bekommen, meine shell ist bash:

#!/bin/sh

#where's the timat shell script?
bindir=$(dirname $0);

#execute
${bindir}/timat ScanChip $@

Soweit ich das verstehe, wird dadurch ein weiteres sh-Skript (timat) aufgerufen, welches dann Java-Code aufruft. Unter Mac OS X funktioniert das Ganze, in Ubuntu bekomme ich ein:

/home/SOFTWARE/TiMAT/bin/timat: 6: Bad substitution

Offensichtlich geht hier irgendwas mit der Variablenübergabe nicht wie es soll!

Ich rufe obiges skript entweder mit: sh ScanChip (so heißt es) oder ./ScanChip oder einfach ScanChip auf, alles mit dem gleichen Resultat.

Hat jemand eine Idee? Wiegesagt, unter Mac OS läuft, auch da unter Verwendung der bash shell.

gma

FrancisA

Anmeldungsdatum:
11. Dezember 2006

Beiträge: 965

Wohnort: Upper Austria

Ha, diese Fehlermeldung kommt mir bekannt vor. 😉

Ändere einmal den Shebang von

#!/bin/sh

auf

#!/bin/bash

Vain

Avatar von Vain

Anmeldungsdatum:
12. April 2008

Beiträge: 2505

Servus,

nein, du nutzt keine Bash, da du #!/bin/sh als Shebang dort stehen hast. See also.

Abgesehen davon ist dieses Skript syntaktisch richtig. (Das Semikolon nach der Variablenzuweisung könntest du dir sparen und wegen fehlenden Quotings könntest du auf die Nase fallen.) Der Fehler entsteht in „timat“ – ich vermute mal ins Blaue hinein, dass das auch ein Shellskript ist, welches auch eine falsche Shebang hat.

gma

(Themenstarter)

Anmeldungsdatum:
7. August 2007

Beiträge: 106

Hi,

ja, alle Skripte starten mit "/bin/sh", wie gesagt: Ändern in "bash" funtkioniert, aber warum ist da Ubuntu penibel, ist sh nicht ähnlich wie bash, und überhaupt, warum läuft das unter Mac OS (ist das nicht genauso Linux?) ohne Probleme?

Wahrscheinlich gibt es da den symbolischen Link von sh auf bash?!

Wie lautet der Befehl dafür in Ubuntu? Könnte ich sowas machen (ich habe leider nicht viel Ahnung von Linux und möchte mein System nicht zerschiessen):

ln -s /bin/bash /bin/sh

Oder würde das meinen sh-Interpreter killen? Ich habe nämlich keine Lust, bei 200 Skripten die shebang-Zeile zu ändern (obwohl man das sicher einfach mit einem kleinen shell-Skript/sed machen könnte).

gma

Vain

Avatar von Vain

Anmeldungsdatum:
12. April 2008

Beiträge: 2505

Servus,

sagen wir’s mal so: Deine Skripte sind einfach falsch. Sie sagen, „ich bin ein Bourne-Shell-Skript“, nutzen dann aber Features, die es nur in der Bash gibt. Das ist halt nicht richtig. ☺

Warum das bei Ubuntu so ist, steht in dem Link ins Ubuntu Wiki. Kann man davon halten, was man will, weil das halt ein sehr häufig auftretender Fehler ist, aber naja…

Der Link empfiehlt, das so zu ändern (da kommt dann eine Abfrage, was du tun möchtest):

$ sudo dpkg-reconfigure dash 

Du könntest auch manuell den Link austauschen, aber dann weiß das Paketsystem nichts davon, was meistens in Murks endet.

Wenn du das so zurückänderst, dann zeigt „/bin/sh“ wieder auf „/bin/bash“ – also so, wie es auf quasi allen anderen GNU/Linux-Systemen auch ist. Kaputt gehen sollte™ da auch nichts. Bash-Skripte laufen dann aber wieder auch mit falscher Shebang.

(MacOS ist übrigens alles mögliche, nur kein Linux. 😀 Hab vom Mac selbst nicht so die Ahnung, aber soweit ich weiß, ist es „nur“ POSIX-konform, aber ansonsten hat das nach meinem Wissen nicht gar so viel mit GNU zu tun.)

HTH. ☺

gma

(Themenstarter)

Anmeldungsdatum:
7. August 2007

Beiträge: 106

Super,

vielen Dank, den Hinweis auf den symbolischen Link hatte ich in dem betreffenden Beitrag überlesen! Jetzt funktioniert es! gma

Antworten |