Gibt es eine Möglichkeit für ein kompiliertes Befehlszeilenprogramm, bash oder csh mitzuteilen, dass in seinen Parametern keine Platzhalterzeichen erweitert werden sollen?
Zum Beispiel möchte man vielleicht einen Shell-Befehl wie:
foo *
um einfach den numerischen ASCII-Wert dieses Zeichens zurückzugeben.
pwd
,echo *
ist nur*
nullglob
deaktiviert ist, bleibt das Wort unverändert. Wenn dienullglob
Option festgelegt ist und keine Übereinstimmungen gefunden werden, wird das Wort entfernt."set -f
? Ist esunset -f
?set +f
Obwohl ein Befehl selbst das Globbing nicht deaktivieren kann, kann ein Benutzer einer Unix-Shell anweisen, einen bestimmten Befehl nicht zu globalisieren. Dies wird normalerweise durch Bearbeiten der Konfigurationsdateien einer Shell erreicht. Angenommen, der Befehl
foo
befindet sich entlang des Befehlspfads, müsste der entsprechenden Konfigurationsdatei Folgendes hinzugefügt werden:Für die sh-, bash- und ksh-Muscheln:
Für die csh- und tcsh-Shells:
Für die zsh-Shell:
Der Befehlspfad muss nicht verwendet werden. Angenommen, der Befehl foo wird im Verzeichnis ~ / bin gespeichert, dann würde das Obige wie folgt lauten:
Für die sh-, bash- und ksh-Muscheln:
Für die csh- und tcsh-Shells:
Für die zsh-Shell:
Alle oben genannten Tests wurden mit Apple OSX 10.9.2 getestet. Hinweis: Achten Sie beim Kopieren des obigen Codes darauf, Leerzeichen zu löschen. Sie können von Bedeutung sein.
Aktualisieren:
User geira hat darauf hingewiesen, dass im Fall einer Bash-Shell
könnte durch ersetzt werden
das macht die Funktion foo überflüssig.
Einige Websites, die zum Erstellen dieses Dokuments verwendet wurden:
Unix-Shell
Übergeben Sie Befehlszeilenargumente an einen Bash-Alias-Befehl
Csh - Die C-Shell
Bash Builtin-Befehle
Vergleich mit der Bourne-Shell und den csh-Startsequenzen
Alias-Schleife in csh
Wie übergebe ich Befehlszeilenargumente an einen Shell-Alias?
Programm aufrufen, wenn eine Bash-Funktion denselben Namen hat
Spezielle Shell-Variablen
C Shell-Aliase mit Befehlszeilenargumenten
Verhindern der Wildcard-Erweiterung / Globbing in Shell-Skripten
quelle
Die Erweiterung wird von der Shell durchgeführt, bevor Ihr Programm ausgeführt wird. Ihr Programm hat keine Ahnung, ob eine Erweiterung stattgefunden hat oder nicht.
schaltet die Erweiterung in der aufrufenden Shell aus, aber Sie müssen dies tun, bevor Sie Ihr Programm aufrufen.
Die Alternative besteht darin, Ihre Argumente zu zitieren, z
quelle
set -o noglob
deaktivieren Sie für Bash die Platzhaltererweiterung.Achtung: Wenn keine Namen zur Maske passen, übergibt bash das Argument unverändert ohne Erweiterung!
Beweis (pa.py ist ein sehr einfaches Skript, das nur seine Argumente druckt):
quelle
set -o nullglob
odershopt -s failglob
, und dieses Verhalten wird sich ändern (auf zwei sehr unterschiedliche Arten).