Aliase sind ein Merkmal der Shell. Das Definieren eines Alias erstellt einen neuen Shell-Befehlsnamen. Es wird nur von der Shell erkannt und nur, wenn es als Befehlsname erscheint.
Wenn Sie beispielsweise
eingeben> ff
an einem Shell-Prompt wird Ihr Alias aufgerufen, aber wenn Sie
eingeben> echo ff
der 03
ist nur ein Argument, kein Befehl. (Zumindest in Bash können Sie einige Tricks spielen, wenn die Alias-Definition mit einem Leerzeichen endet. Sehen Sie sich die Antwort von Stéphane Chazelas für eine mögliche Lösung an, wenn Sie entschlossen sind, Shell-Aliase zu verwenden.)
Sie haben
eingegeben> gdb ff
also hat die Shell 18
aufgerufen , indem Sie ihm die Zeichenfolge 23
übergeben als Argument.
Über 35
können Sie Argumente an das debuggte Programm übergeben Befehlszeile, aber Sie müssen den 48
verwenden Möglichkeit. Zum Beispiel:
> gdb firefox --safe-mode
versucht (und scheitert), 54
zu behandeln als Option zu 68
. Um den Befehl mit einem Argument auszuführen, können Sie dies manuell tun:
> gdb firefox
...
(gdb) run --safe-mode
oder, wie mich die Antwort von thrig erinnert, können Sie 75
verwenden :
> gdb --args firefox --safe-mode
...
(gdb) run
(Das erste Argument nach 86
ist der Befehlsname; alle verbleibenden Argumente werden an den aufgerufenen Befehl übergeben.)
Es ist möglich, die Argumente aus einem Shell-Alias zu extrahieren, aber ich würde empfehlen, einfach einen separaten Alias zu definieren:
alias ff='firefox --safe-mode'
alias gdbff='gdb --args firefox --safe-mode'
Oder verwenden Sie besser Shell-Funktionen, die viel vielseitiger sind. Das Bash-Handbuch sagt:
Für fast alle Zwecke werden Shell-Funktionen Aliasen vorgezogen.
Nicht direkt, aber es ist möglich, wenn man ZSH-Shell-Aliase in eine Form bringt, die für 91
geeignet ist .
alias testtest='echo test test test'
function gdb-alias() {
local cmdargs
cmdargs=( ${(z)${aliases[$1]}} )
gdb -q --args $cmdargs
}
Dies teilt den Alias auf (robusterer Code würde prüfen, ob das erste Argument tatsächlich ein Alias ist oder sogar gesetzt ist usw.), wie es ZSH tun würde, und speist diese Argumente dann in 108
ein über das praktische 118
Flag (siehe 127
). Wenn wir dann 130
ausführen
% gdb-alias testtest
Reading symbols from echo...(no debugging symbols found)...done.
(gdb) r
Starting program: /Users/jhqdoe/usr/Darwin15.6.0-x86_64/bin/echo test test test
test test test
[Inferior 1 (process 93721) exited normally]
(gdb)
was zeigt, dass 140
(meine Assembly-Implementierung von 154
, sowieso) wurde von 168
ausgeführt mit den Argumenten aus dem Alias.
(Dies wird wahrscheinlich bei globalen Aliasen oder allen Aliasen mit dem Shell-Metazeichen foo brechen, je nachdem, ob gdb diese Argumente durch eine Shell wirft, die mit allem kompatibel ist, was in ZSH festgelegt werden könnte, aber für einfachen 173
In POSIX-Shells werden Aliase nur an Befehlsposition (dort wo ein Befehl erwartet wird) oder nach Aliasnamen erweitert, deren Erweiterung mit einem Leerzeichen endet (in 184
, nur ein Leerzeichen und in vielen anderen Implementierungen nur ein Leerzeichen oder ein Tabulator)¹. Außerdem benötigen Sie den 193
Option zu 206
um Argumente an das zu debuggende Programm übergeben zu können. Sie können also Folgendes tun:
alias gdba='gdb --args ' # note the trailing space which does mean
# that aliases are to be expanded after it
alias ff='firefox --safe-mode'
gdba ff
¹ zsh unterstützt auch global Aliasse (mit 216
), die an vielen weiteren Stellen erweitert werden, aber Sie würden einen solchen Alias wahrscheinlich nicht für Ihren 229
verwenden wollen hier, da Sie 233
nicht wollen würden um beispielsweise etwas anderes als 243
auszugeben .