Test komutu [ -t 1 ]
kontrol Bash çıkış bir terminal olup. Bu hattın amacı, bir terminali açarken bash'ın diğer kullanımlarını bozmadan zsh'yi çalıştırmaktır. Ama çok kötü yapıldı.
Dosya .bashrc
üç durumda okunur:
- Bash etkileşimli kabuk olarak yürütüldüğünde, yani toplu komutları yürütmek yerine kullanıcı tarafından yazılan komutları çalıştırmak için.
- Bash, bir RSH veya SSH arka plan programı tarafından çalıştırılan etkileşimli olmayan bir kabuk olduğunda (genellikle çalıştığınız
ssh host.example.com somecommand
ve bash oturum açma kabuğunuz olduğu için host.example.com
).
- Açıkça çağrıldığında, örneğin bir kullanıcının
.bash_profile
( bash'ın başlangıç dosyaları seçimi biraz gariptir ).
[ -t 1 ]
etkileşimli kabukları tespit etmenin kötü bir yoludur. Bir terminale gitmeyen standart çıkış ile bash'ı etkileşimli olarak çalıştırmak mümkündür, ancak nadirdir. Etkileşimli olmayan bir kabuktaki bir terminale standart çıkışın sağlanması daha yaygındır; etkileşimli olmayan bir kabukta iş yok .bashrc
ama maalesef SSH tarafından çağrılan bash kabukları var. Çok daha iyi bir yol var: bash (ve diğer herhangi bir sh tarzı kabuk) bunu yapmak için yerleşik, güvenilir bir yöntem sağlar.
case $- in
*i*) echo this shell is interactive;;
*) echo this shell is not interactive;;
esac
Bu yüzden “bu etkileşimli bir kabuksa zsh başlat” yazılmalıdır
case $- in
*i*) exec zsh;;
esac
Ancak bu bile iyi bir fikir değildir: zsh kullansanız bile yararlı olan bir bash kabuğunun açılmasını önler. Bu blog gönderisini unutun ve bunun yerine basitçe bir terminal açan kısayolunuzu bash yerine zsh çalıştıracak şekilde yapılandırın. “Windows'ta Bash uygulamasını her açtığınızda, şimdi Zsh kabuğuyla başlayacak” şeyleri düzenlemeyin: zsh istediğinizde, Zsh uygulamasını açın.
bash
okuyabilir.bashrc
etkileşimli ( kullanıcının ana bilgisayarda oturum açma kabuğununssh host cmd
neredebash
olduğu veya kaynaklarınbash --login -c 'some code'
nerede olduğu.bash_profile
gibi.bashrc
).case $- in *i*)...
bir kabuğun etkileşimli olup olmadığını test etmenin doğru yoludur.