Dari manual bash
Aturan tentang definisi dan penggunaan alias agak membingungkan. Bash selalu membaca setidaknya satu jalur input lengkap sebelum menjalankan salah satu perintah di jalur itu. Alias diperluas ketika perintah dibaca, bukan saat dijalankan. Oleh karena itu, definisi alias muncul pada baris yang sama dengan perintah lain tidak berlaku hingga baris input berikutnya dibaca. Perintah yang mengikuti definisi alias di baris itu tidak terpengaruh oleh alias baru. Perilaku ini juga merupakan masalah ketika fungsi dijalankan. Alias diperluas ketika definisi fungsi dibaca, bukan ketika fungsi dieksekusi , karena definisi fungsi itu sendiri adalah perintah majemuk. Sebagai konsekuensi, alias yang didefinisikan dalam suatu fungsi tidak tersedia sampai setelah fungsi tersebut dieksekusi . Agar aman, selalu letakkan definisi alias pada baris yang terpisah, dan jangan gunakan alias dalam perintah majemuk.
Dua kalimat "Alias diperluas ketika definisi fungsi dibaca, bukan ketika fungsi dieksekusi" dan "alias yang didefinisikan dalam fungsi tidak tersedia sampai setelah fungsi dijalankan" tampaknya bertentangan satu sama lain.
Bisakah Anda menjelaskan masing-masing artinya?
.bashrc
file di bagian paling atas.Jawaban:
Alias diperluas ketika definisi fungsi dibaca, bukan ketika fungsi dieksekusi ...
Meskipun
myfunc
sudah didefinisikan untuk memanggilmyalias
, dan saya telah mendefinisikan ulangmyalias
,myfunc
masih mengeksekusi definisi asli darimyalias
. Karena alias diperluas ketika fungsi didefinisikan. Faktanya, shell tidak lagi mengingatmyfunc
panggilan itumyalias
; hanya tahu yangmyfunc
memanggilcat
:... alias yang didefinisikan dalam suatu fungsi tidak tersedia sampai setelah fungsi tersebut dieksekusi.
The
myalias
alias tidak tersedia sampaimyfunc
fungsi telah dieksekusi. (Saya percaya itu akan agak aneh jika mendefinisikan fungsi yang mendefinisikan alias sudah cukup untuk menyebabkan alias didefinisikan.)sumber
Saya perlu jawaban yang dinyatakan oleh kalimat pertama ketika saya mencoba cuplikan di bawah ini di
.bashrc
.setelah itu
unalias -a; source ~/.bashrc
, saya mencoba untuk mengeksekusilf
danlsf
,tampak jelas bahwa alias diperluas pada definisi fungsi, bukan eksekusi fungsi, karena :
lf
, kesalahan-bash: ll: command not found
, danlsf
,/usr/bin/ls
digunakan, bukan bentuk alias, tidak ada highlight warna, dan tidak ada karakter kontrol setelah file yang dapat dieksekusi.sumber