Saya memiliki fungsi bash (atau alias), misalnya function install() {sudo apt-get install $@}
. Saat menjalankan perintah install dicelab
, apa yang saya harapkan sebenarnya akan dijalankan adalah sudo apt-get install dicelab
. Di mana saya bisa melihat apa yang sebenarnya dijalankan oleh shell? Saya ingin memastikan bahwa alias saya yang lebih rumit berfungsi seperti yang diharapkan.
20
$@
bagian dari alias Anda? Ingat bahwa alias tidak benar-benar mendukung argumen, yang akan diperluas ke parameter posisi (jika ada) dari konteks yang memanggil alias. Cara biasa menjalankansomealias some args
berfungsi hanya dengan memperluas alias dan meninggalkan argumen untuk mengikutinya. Jika Anda benar-benar ingin dapat mengakses argumen, gunakan fungsi, dan kutip"$@"
"$@"
, argumen dengan spasi putih atau karakter glob akan membakar sebaliknya.Jawaban:
Gunakan
set -x
di shell.Menggunakan
set -x
bergantian padaxtrace
opsi shell (set +x
mematikannya) dan harus bekerja di semua Bourne-seperti kerang, sepertibash
,dash
ksh93
,pdksh
danzsh
. Ini meminta shell untuk menampilkan perintah yang dieksekusi setelah ekspansi alias dan ekspansi variabel dll. Telah dilakukan.Outputnya akan berada pada stream kesalahan standar shell (seperti prompt biasa) sehingga tidak akan mengganggu pengalihan output standar, dan itu akan didahului oleh prompt seperti yang didefinisikan oleh
PS4
variabel shell (+␣
secara default).Contoh dengan beberapa fungsi:
Saya menjalankan dengan
set -x
semua kerang interaktif saya secara default. Sangat menyenangkan untuk melihat apa yang sebenarnya dieksekusi ... tapi saya perhatikan bahwa penyelesaian tab yang dapat diprogram, dll. Dapat menyebabkan keluaran jejak yang tidak diinginkan di beberapa shell.sumber
Anda dapat menggunakan
shell-expand-line
, yang terikat ke Control- Alt- esecara default:Antara lain, itu akan mengganti alias di baris saat ini dengan definisi mereka sehingga Anda dapat melihat perintah yang masih akan Anda jalankan. Contoh:
sumber
shell-expand-line
?zsh
. Tetapi beberapa orang memiliki ide sendiri: wiki.math.cmu.edu/iki/wiki/tips/20140625-zsh-expand-alias.htmlAnda bisa menggunakan bash builtin
type
untuk melihat alias atau definisi fungsi yang akan Anda jalankan:sumber