/bin/shมีโปรแกรมหลายตัวที่ใช้ภาษาที่มี บน Ubuntu นั้น/bin/shเป็นเส้นประซึ่งถูกออกแบบมาให้ทำงานเร็วใช้หน่วยความจำเพียงเล็กน้อยและไม่รองรับเกินกว่าที่คาด/bin/shไว้ บน RHEL /bin/shคือ bash ซึ่งช้ากว่าและใช้หน่วยความจำมากกว่า แต่มีคุณสมบัติมากกว่า หนึ่งในคุณสมบัติเหล่านี้คือ==โอเปอเรเตอร์สำหรับ[ไวยากรณ์ตามเงื่อนไข Dash รองรับ[ซึ่งเป็นคุณสมบัติพื้นฐานของ sh แต่ไม่มีตัว==ดำเนินการซึ่งเป็นส่วนขยาย bash (และ ksh และ zsh)
คุณสามารถเปลี่ยนระบบของคุณเป็นการใช้ bash บน Ubuntu, การเชื่อมโยงสัญลักษณ์/bin/sh dashคุณสามารถทำให้มันเป็นลิงค์สัญลักษณ์bashแทน เวอร์ชันปัจจุบันของ Debian และ Ubuntu (และอนุพันธ์) ทำให้ตัวเลือกนี้เป็นตัวเลือกในการติดตั้งของเส้นประ หากต้องการเปลี่ยนให้เรียกใช้
sudo dpkg-reconfigure dash
และตอบ“ ใช่” เพื่อให้รีบเป็น/bin/shหรือ“ ไม่” เพื่อเปลี่ยนเป็นทุบตี
คุณสามารถทุบตีได้/bin/shแต่มันจะทำให้ระบบของคุณช้าลงเล็กน้อย เป็นไปได้ยิ่งที่สคริปต์ระบบบางตัวไม่สามารถใช้ร่วมกับ bash ได้ แต่นั่นไม่น่าเป็นไปได้เนื่องจาก bash นั้นส่วนใหญ่จะเป็นระบบที่มีความเร็วสูง
สำหรับการแจกแจงที่ไม่มีอินเทอร์เฟซให้เลือกระหว่างการนำไปใช้งานต่อไป/bin/shนี้เป็นวิธีเปลี่ยนเป็นทุบตี
sudo ln -s bash /bin/sh.bash
sudo mv /bin/sh.bash /bin/sh
เปิดเทอร์มินัลค้างไว้และตรวจสอบว่าคุณยังคงสามารถเรียกใช้shสคริปต์บางอย่างหลังจากนั้น หากคุณทำให้คำสั่งนี้เลอะเทอะมันจะทำให้ระบบของคุณใช้งานไม่ได้ (โดยวิธีเหตุผลที่ฉันใช้คำสั่งหลายคำสั่งด้านบนแทนที่จะดูแบบตรงไปตรงมาsudo ln -sf bash /bin/shก็คือln -sfมันไม่ได้เป็นแบบอะตอมในกรณีที่คอมพิวเตอร์ของคุณเกิดข้อผิดพลาดในระหว่างการดำเนินการนี้คุณอาจต้องบูตจากสื่อกู้ภัย ในทางตรงกันข้ามmvคืออะตอม)
ในการกู้คืน dash เป็น/bin/sh:
sudo ln -s dash /bin/sh.dash
sudo mv /bin/sh.dash /bin/sh
โปรดทราบว่าถ้า sh เป็น/bin/bashค่าเริ่มต้นในการกระจายของคุณการสลับไปที่เส้นประอาจทำให้สคริปต์ล้มเหลวเนื่องจากทุบตีมีคุณสมบัติมากมายกว่าเส้นประ สคริปต์ Bash ควรเริ่มต้นด้วย#!/bin/bashและสคริปต์ที่ขึ้นต้นด้วย#!/bin/shไม่ควรใช้คุณสมบัติเฉพาะของ bash แต่การแจกแจงที่มาพร้อมกับ bash /bin/shนั้นอาจใช้คุณสมบัติเฉพาะของ bash ใน#!/bin/shสคริปต์ที่เฉพาะเจาะจงสำหรับการแจกจ่ายนั้น (ใช้ได้ตราบใดที่ผู้ใช้ไม่คาดหวัง สามารถสลับไปที่เส้นประเป็น/bin/shและไม่มีความคาดหวังว่าสคริปต์เหล่านี้ทำงานในการกระจายอื่น)
===นั่นและการขยายตัวแปรควรจะยกมาสองครั้ง