Zsh ve bash arasında takma adları ve PATH ayarını paylaşın


24

Normalde kullandığım kabuk zsh. Ben gibi bazı programlarda rengini etkinleştirmek için çeşitli adlar var lsve grep. Özel yolumu da ayarladım, böylece programları standart dışı bir yerde (örn. Gibi ~/bin/) yürütebilirim .

Ben root shell değişmeyecek için zsh, ama bu kök de buna sahip böylece bu ayarı paylaşmak istiyorum. Bunun zshkaynak olmadığını öğrendim /etc/profile. Kaynak verebilirim /etc/zsh/zprofile, ama daha başka "uygun" bir yol istiyorum.

Yanıtlar:


16

Bir dosya oluşturmak istiyorum /etc/commonprofileve hem de kaynak /etc/profileve /etc/zsh/zprofile. Bu size genel ayarları paylaşır ve hala kullanma fırsatı verir bashsırasıyla zshbelirli ayarları ve sözdizimi /etc/profilesırasıyla zprofile.


diğer iyi cevaplar arasında bence bu bana en iyi, nispeten basit ve "temiz"
ifadesi

"kaynak" derken ne demek istiyorsun?
Hlung

@Hlung Kabuk profili açıklamasını yüklemek için, burada 'kaynak /path/to/.shell_profile' geliyor. 'Kaynak' sayfasındaki man sayfasına bakın.
Itachi

17

Zsh, POSIX sh kodunu ve bazı bash uzantılarını yürütmesine izin verecek bir sh uyumluluk moduna sahiptir. Zsh'ın sahip olmadığı bash özelliklerini kullanmadığınız sürece (aynı sözdizimiyle), her iki kabuğun sağladığı aynı dosyaya sahip olabilirsiniz. emulateZsh ile uyumluluk moduna geçmek için dahili ayarları kullanın ; ile -Lseçeneği, öykünme kapsayan fonksiyonu (değil içine kaynaklı script) için yerel.

source_sh () {
  emulate -LR sh
  . "$@"
}

Ortam değişkenleri gibi şeyler için , profil dosyalarının bash özgü özellikleri kullanması muhtemel olmadığından, source_sh /etc/profileiçinde /etc/zprofileve source_sh ~/.profileiçinde ~/.zprofilekullanabilirsiniz.

Kabuk rc dosyaları olasılıkla (... istemi, anahtar bağları, tamamlama ayarlarında) gibi bir dosya kullanmak paylaşılamayan bir çok şey içerecek şekilde olduklarından takma adları ve işlev tanımları gibi şeyler için ~/.sh_aliaseski kaynaklı ~/.bashrcve source_sh'd içinde ~/.zshrc.


2
"Gilles tarafından verilen tüm cevapları otomatik olarak yen" demenin bir yolu olmalı. Bu bana biraz zaman kazandıracak. Hayır, cevapların çok etkileyici. Her zaman doğru, iyi yazılmış ve kapsamlı.
fschmitt

@ fschmitt: Katılıyorum. Gördüğün gibi, düzenlenmiş bile değil! Burada verilen bu ipucu gerçekten çok iyi.
Biri hala

4

Basit bir sembolik bağlantıya ne dersiniz?

ln -s /etc/profile /etc/zsh/zprofile

Bazı koşullu başlatma işlemlerine ihtiyacınız varsa, bunun gibi bir şey de ekleyebilirsiniz:

#Determine our shell without using $SHELL, which may lie
shell="sh"
if test -f /proc/mounts; then
   case $(/bin/ls -l /proc/$$/exe) in
        *bash) shell=bash ;;
        *dash) shell=dash ;;
        *ash)  shell=ash ;;
        *ksh)  shell=ksh ;;
        *zsh)  shell=zsh ;;
    esac
fi

Hmm ama bunun kaynağından daha temiz olacağını sanmıyorum. Hem zsh hem de bash'ın okuyacağı bir dosya var mı?
phunehehe

Bir bağlantının kaynağının ya da bağlantısının “temiz” bir çözüm olmadığını düşündüren nedir?
echox

Sadece gerekirse, bağlantıyı yönetmek yerine dosyayı kaynaklamak istediğimi söylemek istedim. Dosyalar arasında çok fazla bağımlılık yaratmak istemiyorum.
phunehehe

1
Bir daha taşınabilir bir alternatif /bin/ls -l /proc/$$/exeolduğu ps -o comm= -p $$. Bu tam olarak güvenilir değildir, çünkü bazı kabuklar nasıl kullanıldığına bağlı olarak farklı davranır; basitçe test pratikte $0de .profiledaha iyi bir gösterge olması muhtemeldir. Ama yararlı özellikler (bash, ksh, zsh) teklif en kabukları basitçe tanınan (ve büyük bir artı olduğunu tespit onların sürümü) olabilir bazı değişkenleri test ederek: $BASH, $BASH_VERSION, $BASH_VERSINFO; $KSH_VERSION, ${.sh.version}; $ZSH_VERSION.
Gilles 'SO- kötülükten

echox, case deyiminiz zsh4'ü doğru şekilde algılamıyor #Tabuklarımızı $ SHELL kullanmadan belirtin; o zaman $ (/ bin / ls-l / proc / $$ / exe) bash) kabuğu = bash; * çizgi) kabuk = çizgi; * kül) kabuk = kül; * ksh) kabuk = ksh; * zsh ) kabuk = zsh; #matches zsh4 esac fi
Bryan Hunt

0

Değişkenler ile ilgili olarak, eksik modüller ve modül dosyaları [1] olduğu izlenimine sahibim. Bunu yapmaya başladığınızda, çeşitli mermiler (bash & zsh dahil), python, perl ve hatta daha fazla ortam için tek bir modül dosyasının rahatlığında ortak profiller oluşturmak kolay olacaktır.

Takma adları aynı şekilde tanımlamak da mümkündür; ancak, takma adların art arda gelen kabuklar arasında çok iyi kalıtılmadığını ve geçici çözümlere ihtiyaç duyabileceklerini çabucak göreceksiniz.

[1] http://en.wikipedia.org/wiki/Environment_Modules_(software)

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.