คำสั่งทดสอบ [ -t 1 ]การตรวจสอบว่าการส่งออกทุบตีอยู่บนขั้ว เจตนาของบรรทัดนี้คือการรัน zsh อย่างชัดเจนเมื่อเปิดเทอร์มินัลโดยไม่รบกวนการใช้ bash อื่น ๆ แต่มันทำไม่ดีมาก
ไฟล์.bashrcถูกอ่านในสามสถานการณ์:
- เมื่อทุบตีจะดำเนินการเป็นเปลือกโต้ตอบคือการเรียกใช้คำสั่งที่พิมพ์โดยผู้ใช้มากกว่าที่จะดำเนินการคำสั่งชุด
- เมื่อ bash เป็นเชลล์ที่ไม่มีการโต้ตอบซึ่งดำเนินการโดย RSH หรือ SSH daemon (โดยทั่วไปจะเป็นเพราะคุณรัน
ssh host.example.com somecommandและ bash คือเชลล์ล็อกอินของคุณhost.example.com)
- เมื่อมีการเรียกใช้อย่างชัดเจนเช่นในผู้ใช้
.bash_profile( การเลือกไฟล์เริ่มต้นของ bash ค่อนข้างแปลก )
[ -t 1 ]เป็นวิธีที่ไม่ดีในการตรวจหาเชลล์แบบโต้ตอบ เป็นไปได้ แต่ยากที่จะรัน bash แบบโต้ตอบกับเอาต์พุตมาตรฐานไม่ไปที่เทอร์มินัล เป็นเรื่องปกติที่จะมีเอาต์พุตมาตรฐานไปยังเทอร์มินัลในเชลล์ที่ไม่มีการโต้ตอบ เชลล์ที่ไม่มีการโต้ตอบนั้นไม่มีธุรกิจที่ทำงานอยู่.bashrcแต่น่าเสียดายที่ bash shell นั้นถูกเรียกใช้โดย SSH มีวิธีที่ดีกว่ามาก: ทุบตี (และเชลล์สไตล์ sh อื่น ๆ ) ให้วิธีการในตัวที่เชื่อถือได้ในการทำ
case $- in
*i*) echo this shell is interactive;;
*) echo this shell is not interactive;;
esac
ดังนั้นควร“ เขียน zsh ถ้านี่เป็นเชลล์แบบโต้ตอบ”
case $- in
*i*) exec zsh;;
esac
แต่นั่นไม่ใช่ความคิดที่ดี: มันป้องกันการเปิด bash shell ซึ่งมีประโยชน์แม้ว่าคุณจะใช้ zsh ลืมเกี่ยวกับการโพสต์บล็อกนี้และเพียงแค่กำหนดค่าทางลัดของคุณที่เปิด terminal เพื่อรัน zsh แทนการทุบตี อย่าจัดเรียงสิ่งต่าง ๆ ดังนั้น“ เมื่อใดก็ตามที่คุณเปิดแอปพลิเคชัน Bash บน Windows ตอนนี้มันจะเริ่มต้นด้วยเชลล์ Zsh”: เมื่อคุณต้องการ zsh ให้เปิดแอปพลิเคชัน Zsh
bashสามารถอ่าน.bashrcแม้ไม่ได้ แบบโต้ตอบ (เช่นเดียวกับssh host cmdที่bashอยู่ในเปลือกเข้าสู่ระบบของผู้ใช้บนโฮสต์หรือbash --login -c 'some code'ที่.bash_profileแหล่งที่มา.bashrc)case $- in *i*)...เป็นวิธีที่ถูกต้องในการทดสอบว่าเชลล์มีการโต้ตอบหรือไม่