it-swarm.com.de

Bash-Skripte werden nicht ausgeführt, ohne "bash" davor einzugeben

Auf unserem Schulsystem können wir Skriptdateien ausführen, ohne bash oder csh einzugeben, oder was Sie haben, ohne anzugeben, um welchen Skripttyp es sich handelt. Unter Ubuntu muss ich zum Beispiel bash script.bash eingeben. Ist dies in Ubuntu immer notwendig, oder kann ich eine Einstellung ändern?

11
muttley91
  1. Stellen Sie sicher, dass Sie das Skript mit ./script oder dem vollständigen Pfad oder was auch immer starten. Nur script funktioniert möglicherweise nicht (es funktioniert, wenn sich das Verzeichnis in $PATH befindet, wie /usr/bin), da es auf UNIX-Systemen keine Gewohnheit ist, das aktuelle Verzeichnis in Ihrem Pfad zu haben (aus Sicherheitsgründen) Gründe, und es ist gut!)

  2. Stellen Sie sicher, dass das Skript ausführbar ist, zum Beispiel: chmod +x script macht es ausführbar.

  3. Stellen Sie sicher, dass Sie #!/bin/bash als erste Zeile in Ihrem Skript haben. Stellen Sie außerdem sicher, dass es nicht mit einem Windows-Editor bearbeitet wird, da dieser häufig den "DOS-Typ" von eol (Zeilenende) verwendet, der sich vom UNIX-Typ unterscheidet (wenn die Checkliste oben in Ordnung ist, Sie jedoch "schlecht" wurden) interpretator: keine solche datei oder kein solches verzeichnis "oder so, auch wenn es sich um/bin/bash handelt, ist dies oft der grund, da die nicht druckbare - so dass sie normalerweise nicht angezeigt wird - als teil der Pfad des Dolmetschers)

Andere haben bereits erwähnt: Es ist wichtig, /bin/bash zu haben, wenn Sie Bash-Funktionen verwenden. Auch /bin/sh wurde mit /bin/bash verknüpft, aber heutzutage (soweit ich das mitbekommen habe) ist dies mit einem Link verbunden dash, das keine Bash-Kompatibilität bietet, nur das POSIX sh. Es ist ziemlich wichtig, dass selbst recht teure Softwareprodukte in unserer Firma dieses Problem haben: Skripte enthalten #!/bin/sh als erste Zeile, aber es hängt auch von den Bash-Funktionen ab.

17
LGB

Stellen Sie sicher, dass die erste Zeile der Datei lautet:

#!/bin/bash

Wenn der Shebang #!/bin/sh ist, sollten Sie keine bash-spezifischen Funktionen verwenden, sondern nur POSIX-Funktionen. Auch wenn /bin/sh ein Symlink zu bash ist, wird bash im POSIX-Kompatibilitätsmodus ausgeführt, wenn es als sh ausgeführt wird, wodurch einige (aber nicht alle) bash-Funktionen deaktiviert werden.

Natürlich müssen Sie auch sicherstellen, dass das Skript ausführbar ist.

4
geirha

Eine Alternative, davon wird dringend abgeraten ist das Hinzufügen von . zu PATH.

PATH=".:$PATH"

oder

PATH="$PATH:."

Das Problem bei diesem Ansatz ist, dass im ersten Fall jeder Systembefehl mit ausführbaren Dateien aus dem aktuellen Verzeichnis überschrieben werden kann und im zweiten Fall unbekannte Befehle immer noch überschrieben werden können.

Folgendes berücksichtigen:

Datei: ls

#!/bin/bash

./my_malicious_script &>/dev/null
/bin/ls "[email protected]"

Höchstwahrscheinlich merkt man es erst, wenn es zu spät ist.

0
nyuszika7h