Các lệnh kiểm tra [ -t 1 ]
kiểm tra xem sản lượng bash là trên một thiết bị đầu cuối. Mục đích của dòng này rõ ràng là chạy zsh khi mở một thiết bị đầu cuối, mà không làm gián đoạn việc sử dụng bash khác. Nhưng nó được thực hiện rất tệ.
Các tập tin .bashrc
được đọc trong ba trường hợp:
- Khi bash được thực thi như một shell tương tác, tức là để chạy các lệnh được người dùng gõ chứ không phải để thực thi các lệnh bó.
- Khi bash là một vỏ không tương tác được chạy bởi một daemon RSH hoặc SSH (thường là do bạn chạy
ssh host.example.com somecommand
và bash là vỏ đăng nhập của bạn trên host.example.com
).
- Khi nó được gọi một cách rõ ràng, ví dụ như trong người dùng
.bash_profile
( lựa chọn tệp khởi động của bash hơi lạ ).
[ -t 1 ]
là một cách kém để phát hiện vỏ tương tác. Có thể, nhưng hiếm, để chạy bash tương tác với đầu ra tiêu chuẩn không đi đến một thiết bị đầu cuối. Nó phổ biến hơn khi có đầu ra tiêu chuẩn đi đến một thiết bị đầu cuối trong một vỏ không tương tác; một shell không tương tác không có hoạt động kinh doanh .bashrc
nhưng không may là shell bash được gọi bởi SSH. Có một cách tốt hơn nhiều: bash (và bất kỳ shell sh-style nào khác) cung cấp một phương thức tích hợp, đáng tin cậy để thực hiện.
case $- in
*i*) echo this shell is interactive;;
*) echo this shell is not interactive;;
esac
Vì vậy, hãy khởi động zsh nếu đây là một shell tương tác nên được viết
case $- in
*i*) exec zsh;;
esac
Nhưng ngay cả đó không phải là một ý tưởng tốt: nó ngăn mở bash shell, điều này hữu ích ngay cả khi bạn sử dụng zsh. Hãy quên bài đăng trên blog này đi và thay vào đó chỉ cần cấu hình lối tắt của bạn để mở một thiết bị đầu cuối để chạy zsh thay vì bash. Đừng sắp xếp mọi thứ sao cho bất cứ khi nào bạn mở ứng dụng Bash trên Windows, giờ đây nó sẽ khởi động với shell Zsh: khi bạn muốn zsh, hãy mở ứng dụng Zsh.
bash
có thể đọc.bashrc
ngay cả khi không tương tác (như trongssh host cmd
đóbash
là vỏ đăng nhập của người dùng trên máy chủ hoặcbash --login -c 'some code'
nơi các.bash_profile
nguồn.bashrc
).case $- in *i*)...
là cách chính xác để kiểm tra nếu một vỏ có tương tác.