Alias adalah fitur dari shell. Mendefinisikan alias membuat nama perintah shell baru. Itu dikenali hanya oleh shell, dan hanya ketika muncul sebagai nama perintah.
Misalnya, jika Anda mengetik
> ff
pada prompt shell, ia akan memanggil alias Anda, tetapi jika Anda mengetik
> echo ff
03
hanyalah argumen, bukan perintah. (Setidaknya di bash, Anda dapat memainkan beberapa trik jika definisi alias diakhiri dengan spasi. Lihat jawaban Stéphane Chazelas untuk kemungkinan solusi jika Anda bertekad untuk menggunakan alias shell.)
Anda mengetik
> gdb ff
jadi shell memanggil 18
, meneruskan string 22
sebagai argumen.
Anda dapat meneruskan argumen ke program debug melalui 35
baris perintah, tetapi Anda harus menggunakan 47
pilihan. Misalnya:
> gdb firefox --safe-mode
mencoba (dan gagal) untuk menangani 54
sebagai opsi untuk 67
. Untuk menjalankan perintah dengan argumen, Anda dapat melakukannya secara manual:
> gdb firefox
...
(gdb) run --safe-mode
atau, seperti yang diingatkan oleh jawaban thrig, Anda dapat menggunakan 75
:
> gdb --args firefox --safe-mode
...
(gdb) run
(Argumen pertama setelah 85
adalah nama perintah; semua argumen yang tersisa diteruskan ke perintah yang dipanggil.)
Dimungkinkan untuk mengekstrak argumen dari alias shell, tetapi saya sarankan hanya mendefinisikan alias terpisah:
alias ff='firefox --safe-mode'
alias gdbff='gdb --args firefox --safe-mode'
Atau, lebih baik, gunakan fungsi shell, yang jauh lebih serbaguna. Manual bash mengatakan:
Untuk hampir setiap tujuan, fungsi shell lebih disukai daripada alias.
Tidak secara langsung tetapi dimungkinkan dengan beberapa perselisihan alias shell ZSH menjadi bentuk yang cocok untuk 90
.
alias testtest='echo test test test'
function gdb-alias() {
local cmdargs
cmdargs=( ${(z)${aliases[$1]}} )
gdb -q --args $cmdargs
}
Ini membagi alias (kode yang lebih kuat akan memeriksa apakah argumen pertama memang alias, atau bahkan disetel, dll) seperti yang dilakukan ZSH dan kemudian memasukkan argumen tersebut ke 108
melalui 118
yang praktis bendera (lihat 126
). Jika kita kemudian menjalankan 130
% 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)
yang menunjukkan bahwa 149
(implementasi rakitan saya dari 154
, anyway) dijalankan oleh 168
dengan argumen dari alias.
(Ini mungkin akan merusak alias global, atau alias apa pun dengan metakarakter shell foo, mungkin, tergantung pada apakah gdb melempar argumen tersebut melalui shell yang kompatibel dengan apa pun yang mungkin disetel di ZSH, tetapi tidak apa-apa untuk 173
Dalam shell POSIX, alias hanya diperluas di posisi perintah (di mana pun perintah diharapkan) atau setelah alias yang perluasannya diakhiri dengan karakter kosong (di 184
, hanya spasi, dan di banyak implementasi lainnya, hanya spasi atau tab)¹. Anda juga membutuhkan 193
opsi untuk 205
untuk dapat meneruskan argumen ke program yang sedang di-debug. Jadi, Anda dapat melakukan:
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 juga mendukung global alias (dengan 216
) yang diperluas di lebih banyak tempat, tetapi Anda mungkin tidak ingin menggunakan alias seperti itu untuk 229
Anda di sini karena Anda tidak ingin 233
misalnya untuk menghasilkan apa pun selain 243
.