Perbedaan antara alias di zsh dan alias di bash


9

Saya telah mencari-cari tetapi tidak dapat menemukan sesuatu yang konklusif. Apakah ada perbedaan antara perintah alias di zsh dan perintah alias di bash? Jika tidak, apakah ini berarti saya dapat membagikan satu set alias di antara dua shell dan berharap keduanya berfungsi seperti yang saya maksud?

Jawaban:



13

Sintaks aliasperintahnya sama di semua shell gaya Bourne. Sehingga Anda dapat berbagi mereka di ~/.zshrc, ~/.bashrc, ~/.kshrc, ~/.shrc, selama mereka masuk akal dalam semua kerang.

Hal yang sama berlaku untuk definisi variabel dan definisi fungsi, selama Anda menggunakan subset sintaks yang didukung di semua shell.

Jika Anda tidak menggunakan versi zsh yang lebih lama dari 4.0, Anda dapat meletakkan semua definisi agnostik shell Anda dalam file bernama (katakanlah) ~/.common.rc.sh, di mana baris pertama adalah

emulate -LR sh 2>/dev/null

Ini memberitahu zsh untuk mengharapkan sintaks yang kompatibel dengan sh dalam file ini saja. Kemudian sumber file di dekat awal ~/.bashrc, ~/.bashrc, ~/.kshrcdan sebagainya.

Ini pada dasarnya apa yang saya lakukan. Sebagai contoh, saya memiliki kode agak rumit yang menghasilkan alias untuk lsdengan pilihan favorit saya tergantung pada apa yang tersedia ( --color, -G, -F, dll); itu shell-agnostik, jadi masuklah .common.rc.sh. Saya juga memiliki alias yang bergantung pada shell, seperti alias zcp='zmv -C'itu .zshrc.


1
Jika saya meletakkan /bin/shshebang di bagian atas file alias saya, apakah itu akan berhasil karena saya bermaksud untuk semua shell?
Zameer Manji

1
@ZameerManji Tidak, jangan meletakkan #!garis: ini bukan skrip mandiri, hanya dapat bersumber di skrip lain. #!toh tidak mengubah perilaku shell.
Gilles 'SO- stop being evil'

3
Perbedaan kecil yang saya temukan adalah bahwa zsh aliasmemperlakukan argumen yang diawali dengan +memperkenalkan opsi seperti -akan, jadi alias +=somethingharus ditulis seperti alias -- +=somethingdalam zsh. Jangan berpikir emulatemengubahnya.
Mikel

Hati-hati dengan ~/.shrckarena Bourne Shell memiliki implementasi alias paling kuat tetapi zshmenggunakan nama opsi yang tidak kompatibel. alias -gmenciptakan alias persisten $HOME/.globalsdengan Bourne Shell. Berbagi definisi alias hanya aman selama Anda menggunakan tidak lebih dari fitur POSIX.
schily

2

zsh's aliasmemungkinkan alias global, sedangkan bashs hanya diperluas di awal baris.

Dalam zsh:

alias -g L="| less -FRX"

Anda kemudian dapat melakukan:

verbose-command L

Lihat di sini untuk daftar alias global yang bermanfaat.


Memanggil semua alias alias "global" adalah ide yang sangat buruk karena ada konsep alias lokal yang dibatasi untuk direktori tertentu, sedangkan alias global sejak 38 tahun berlaku untuk alias yang bersifat independen diectory. Konsep ini berasal dari 1980 dari UNOS dan diimplementasikan di Bourne Shell sejak 6 tahun. UNOS memperkenalkan semua alias yang diperluas pada 1980 juga, zsh bisa melakukan riset untuk menghindari jenis bentrokan ini. Lihat schillix.sourceforge.net/man/man1/bosh.1.html
schily
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.