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:
alias foo='set -f;foo';foo(){ command foo "$@";set +f;}
Für die csh- und tcsh-Shells:
alias foo 'set noglob;\foo \!*;unset noglob'
Für die zsh-Shell:
alias foo='noglob foo'
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:
alias foo='set -f;foo';foo(){ ~/bin/foo "$@";set +f;}
Für die csh- und tcsh-Shells:
alias foo 'set noglob;$home/bin/foo \!*;unset noglob'
Für die zsh-Shell:
alias foo='noglob ~/bin/foo'
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
alias foo='set -f;foo';foo(){ ~/bin/foo "$@";set +f;}
könnte durch ersetzt werden
reset_expansion(){ CMD="$1";shift;$CMD "$@";set +f;}
alias foo='set -f;reset_expansion ~/bin/foo'
das macht die Funktion foo überflüssig.
Einige Websites, die zum Erstellen dieses Dokuments verwendet wurden:
pwd
,echo *
ist nur*