Shebang wird ignoriert [gelöst]

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
twelve
Beiträge: 39
Registriert: 10.02.2006 14:49:17

Shebang wird ignoriert [gelöst]

Beitrag von twelve » 18.08.2014 00:34:37

Hallo,

ich habe mir ein paar deb-Pakete erstellt und in der postinst !/bin/bash als Shebang angegeben. Allerdings wird diese von apt-get geflissentlich ignoriert. Bisher konnte ich das Problem lösen indem ich den Symlink von /bin/sh -> /bin/dash durch /bin/sh -> /bin/bash ersetzt habe.
Allerdings wird bei einem aktuellen Paket trotzdem ein Syntaxfehler angezeigt.

Wenn ich das postinst-Skript mit /bin/bash ./postinst aufrufe gibt es keine Probleme. Verwende ich statt dessen /bin/sh ./postinst wird ein Syntaxfehler angezeigt.

Folgendes würde ich nun gerne wissen:
- Warum verhält sich /bin/bash anhand der Art wie es aufgerufen wird unterschiedlich?
- Warum ignoriert apt-get die Shebang?

Gruß
Robert
Zuletzt geändert von twelve am 18.08.2014 02:05:07, insgesamt 1-mal geändert.

Cae
Beiträge: 6349
Registriert: 17.07.2011 23:36:39
Wohnort: 2130706433

Re: Shebang wird ignoriert

Beitrag von Cae » 18.08.2014 01:16:39

Dir ist schon klar, dass die Shebang #! (Raute, Ausrufezeichen) ist und nicht nur ! (ein Ausrufezeichen)? Sofern das oben kein Tippfehler ist, wird !/bin/bash ignoriert (bzw. wird zu dem Syntaxfehler fuehren) und das Skript mit der Standard-/bin/sh ausgefuehrt. Dasselbe passiert, wenn ueberhaupt keine Shebang vorhanden ist:

Code: Alles auswählen

bash$ echo 'ps $$' >script
bash$ chmod +x script
bash$ ./script
  PID TTY      STAT   TIME COMMAND
 4594 pts/14   S+     0:00 /bin/bash
bash$ sh
sh$ ./script
  PID TTY      STAT   TIME COMMAND
 4338 pts/14   S+     0:00 /bin/sh ./script
sh$ 
(man darf sich allerdings gerne fragen, warum die bash da keinen Dateinamen als Argument im ps-Output stehen hat... ja, die PID ist abweichend von der interaktiven Shell, es ist also nicht dieselbe)

Gruss Cae
If universal surveillance were the answer, lots of us would have moved to the former East Germany. If surveillance cameras were the answer, camera-happy London, with something like 500,000 of them at a cost of $700 million, would be the safest city on the planet.

—Bruce Schneier

twelve
Beiträge: 39
Registriert: 10.02.2006 14:49:17

Re: Shebang wird ignoriert

Beitrag von twelve » 18.08.2014 01:24:45

nur ! ist ein Fehler im Post. In den Skripten steht natürlich #!

Meine postinst beginnt mit:

Code: Alles auswählen

# !/bin/bash
# postinst script for %package_name%
#
# see: dh_installdeb(1)
...

Cae
Beiträge: 6349
Registriert: 17.07.2011 23:36:39
Wohnort: 2130706433

Re: Shebang wird ignoriert

Beitrag von Cae » 18.08.2014 01:41:18

Wie gesagt, die Shebang ist #! als die ersten beiden Zeichen. Deine ersten beiden Zeichen im Skript sind "#" (Raute, Leerzeichen). Faellt dir etwas auf? ;)

Falls du das "schoen" [1] schreiben willst, waere so etwas moeglich:

Code: Alles auswählen

#! /bin/sh
oder auch

Code: Alles auswählen

#!                  /bin/sh
Auch eine Leerzeile vor der Shebang waere verkehrt.

Gruss Cae

[1] ist Ansichtssache, ich finde, 'nen abgesetzter Interpreter sieht doof aus
If universal surveillance were the answer, lots of us would have moved to the former East Germany. If surveillance cameras were the answer, camera-happy London, with something like 500,000 of them at a cost of $700 million, would be the safest city on the planet.

—Bruce Schneier

twelve
Beiträge: 39
Registriert: 10.02.2006 14:49:17

Re: Shebang wird ignoriert

Beitrag von twelve » 18.08.2014 01:59:05

Das war der Fehler :oops:
In der postrm war die Shebang richtig geschrieben...

Interessant finde ich allerdings, dass trotz des "korrigierten" Symlinks /bin/sh -> /bin/bash beim Ausführen von /bin/bash ./postinst ein Syntaxfehler angezeigt wurde.

Trotzdem besten Dank
Robert

Antworten