/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
และไม่มีความคาดหวังว่าสคริปต์เหล่านี้ทำงานในการกระจายอื่น)
==
=
นั่นและการขยายตัวแปรควรจะยกมาสองครั้ง