Auf unserem Schulsystem sind wir in der Lage Skriptdateien ohne Eingabe ausführen bash
oder csh
oder was Sie haben , ohne Angabe , welche Skripttyp es sich handelt. Unter Ubuntu muss ich jedoch bash script.bash
zum Beispiel tippen . Ist dies in Ubuntu immer notwendig oder kann ich diese Einstellung ändern?
11
.sh
Nichtverwendung für Bash-Skripte. Im Allgemeinen werden Dateierweiterungen in der UNIX-Welt jedoch nicht für ausführbare Skripts verwendet.Antworten:
Stellen Sie sicher, dass Sie das Skript mit
./script
oder mit vollständigem Pfad oder was auch immer starten . Funktioniertscript
möglicherweise nicht (es funktioniert, wenn sich das Verzeichnis in$PATH
befindet/usr/bin
), da es auf UNIX-Systemen keine Gewohnheit ist, das aktuelle Verzeichnis in Ihrem Pfad zu haben (aus Sicherheitsgründen und es ist gut!).Stellen Sie sicher, dass das Skript ausführbar ist, zum Beispiel: macht
chmod +x script
es ausführbar.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 obige Checkliste in Ordnung ist, Sie aber "schlecht" sind Interpreter: Keine solche Datei oder kein solches Verzeichnis "oder so, auch wenn es / bin / bash ist, ist dies oft der Grund, da das nicht druckbare - so dass Sie es normalerweise nicht sehen - \ r als Teil des behandelt wird Pfad des Dolmetschers)Andere haben bereits erwähnt: Es ist wichtig zu haben,
/bin/bash
wenn Sie Bash-Funktionen verwenden, mit denen auch/bin/sh
ein Symlink erstellt wurde/bin/bash
, aber heutzutage (soweit ich bemerkt habe) ist es mit einem Symlink verknüpft,dash
der keine Bash-Kompatibilität bietet , sondern nur das POSIXsh
. Es ist sehr wichtig, dass selbst recht teure Software in unserer Firma dieses Problem hat: Skripte enthalten#!/bin/sh
als erste Zeile, aber es hängt auch von den Bash-Funktionen ab.quelle
#!/usr/bin/env bash
was etwas tragbarer ist.Stellen Sie sicher, dass die erste Zeile der Datei lautet:
Wenn dies der Fall ist
#!/bin/sh
, sollten Sie keine bash-spezifischen Funktionen verwenden, sondern nur POSIX-Funktionen. Selbst wenn/bin/sh
es sich um einen Symlink zu handeltbash
, wird bash in einem 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.
quelle
Ein alternativer, stark entmutigter Weg ist das Hinzufügen
.
zuPATH
.oder
Das Problem bei diesem Ansatz besteht darin, dass im ersten Fall jeder Systembefehl mit ausführbaren Dateien aus dem aktuellen Verzeichnis überschrieben werden kann und im zweiten Fall unbekannte Befehle weiterhin überschrieben werden können.
Folgendes berücksichtigen:
Datei: ls
Höchstwahrscheinlich würden Sie es erst bemerken, wenn es zu spät ist.
quelle
echo
beispielsweise der in Ihrem Verzeichnis verwendete einfach verwendet, weil dieses Verzeichnis in derPATH
Variablen vor dem festgelegt ist/bin
. Shell sucht einfach nach Befehlen in bestimmten Verzeichnissen, abhängig von ihrer Reihenfolge inPATH
, und überschreibt / zerstört nichts. Aber ja, das hat Auswirkungen