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 somecommandvà 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 .bashrcnhư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.
bashcó thể đọc.bashrcngay cả khi không tương tác (như trongssh host cmdđóbashlà 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_profilenguồ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.