Ich weiß, dass es eine Reihe von Regeln gibt, die die vom Benutzer eingegebenen Befehle erweitern. (Lassen Sie uns über Bash Shell sprechen.)
Ist es möglich, nach der Shell-Erweiterung einen Befehl im Formular auszudrucken? Es scheint ein gutes Dienstprogramm zu sein, um zu lernen und sicherzustellen, wie die Shell Sonderzeichen erweitert.
z.B
$ echo *
{all the filenames in current dir}
Ich möchte den erweiterten Befehl ausdrucken. Dies ist die folgende Zeile:
echo {all the filenames in .}
echo cat * | someprogram
die nicht das tun, was Sie von dieser Antwort halten.Sie können verwenden
set -x
.Betrachten Sie zum Beispiel das Skript:
Beim Ausführen wird die erweiterte
echo
Anweisung angezeigt, bevor sie tatsächlich ausgeführt wird:Und wie Kundor betont, funktioniert dies auch interaktiv auf der Kommandozeile:
Dokumentation
man bash
erklärtset -x
wie folgt:Der Standardwert für
PS4
ist, wie oben gezeigt, ein Pluszeichen, gefolgt von einem Leerzeichen.quelle
Wenn Sie für eine interaktive Shell drücken und
Ctrl+x
anschließend*
das Glob-Muster eingeben, wird Ihre Befehlszeile mit dem erweiterten Glob-Muster bearbeitet. Von der Bash-Manpage:Möglicherweise interessieren Sie sich auch für glob-list-expansions (
Ctrl+x
,g
).quelle
Ctrl+x, *
unmittelbar nach der Eingabeecho *
und vor dem Drücken der Eingabetaste gedrückt? Wenn es immer noch nicht funktioniert, können Sie~/.inputrc
glob-expand-word ändern und an etwas anderes binden.Ctrl+x
gefolgt vonShift+8
. Sie können versuchen, festzustellen, ob diesCtrl+x, g
funktioniert, oder, wie bereits erwähnt, Ihren eigenen Schlüssel in der.inputrc
Datei zuweisen .Wenn Sie sehen möchten, wie Argumente erweitert oder mit einem Token versehen werden, können Sie ein Programm oder ein Skript verwenden, das die Argumente ausgibt. Hier ist eine Implementierung in
bash
:Angenommen, Sie haben das in eine Datei namens
printargs.sh
(und ausführbar gemacht) geschrieben, dann würden Sie eine Ausgabe wie diese erhaltenquelle