Ich habe zum Beispiel eine Bash-Funktion (oder einen Alias) function install() {sudo apt-get install $@}
. Wenn install dicelab
ich den Befehl ausführe, erwarte ich, dass er tatsächlich ausgeführt wird sudo apt-get install dicelab
. Wo kann ich sehen, was tatsächlich von der Shell ausgeführt wurde? Ich möchte sicherstellen, dass meine komplizierteren Aliase wie erwartet funktionieren.
20
$@
zu deinem Pseudonym? Denken Sie daran, dass Aliase Argumente nicht wirklich unterstützen. Diese werden auf die Positionsparameter (falls vorhanden) des Kontexts ausgedehnt, der den Alias aufruft. Die übliche Art der Ausführung besteht darinsomealias some args
, den Alias zu erweitern und die Argumente zu belassen, um ihm zu folgen. Wenn Sie tatsächlich auf die Argumente zugreifen möchten, verwenden Sie eine Funktion und zitieren Sie"$@"
"$@"
. Argumente mit Leerzeichen oder Glob-Zeichen brennen ansonsten.Antworten:
Verwenden Sie
set -x
in der Schale.Mit
set -x
Windungen auf derxtrace
Shell - Option (set +x
schaltet es aus) und soll in allen Bourne-like arbeiten Muscheln, wiebash
,dash
ksh93
,pdksh
undzsh
. Dadurch wird die Shell aufgefordert, den Befehl anzuzeigen, der ausgeführt wird, nachdem Alias-Erweiterungen, Variablen-Erweiterungen usw. ausgeführt wurden.Die Ausgabe erfolgt im Standardfehlerstrom der Shell (genau wie bei der normalen Eingabeaufforderung), sodass die Umleitung der Standardausgabe nicht beeinträchtigt wird. Vor der Ausgabe wird eine Eingabeaufforderung angezeigt, die von der
PS4
Shell-Variablen definiert wird (+␣
standardmäßig).Beispiel mit einigen Funktionen:
Ich arbeite
set -x
standardmäßig mit allen meinen interaktiven Shells. Es ist schön zu sehen, was tatsächlich ausgeführt wurde ... aber mir ist aufgefallen, dass die Fertigstellung programmierbarer Tabs usw. in einigen Shells zu unerwünschten Trace-Ausgaben führen kann.quelle
Sie könnten verwenden
shell-expand-line
, was standardmäßig an Control- Alt- gebunden ist e:Unter anderem wird es Aliase in der aktuellen Zeile mit ihrer Definition ersetzen , so dass Sie einen Befehl sehen Sie noch zu gehen laufen. Beispiel:
quelle
shell-expand-line
?zsh
. Aber einige Leute haben sich ihre eigenen Ideen ausgedachtSie können die integrierte Bash-Funktion
type
verwenden, um einen Alias oder eine Funktionsdefinition anzuzeigen, die Sie ausführen möchten :quelle