ในของ.profile
ฉันฉันใช้รหัสต่อไปนี้เพื่อให้แน่ใจว่านามแฝงที่เกี่ยวข้องกับ Bash และฟังก์ชั่นมีที่มาเฉพาะถ้าเปลือกเข้าสู่ระบบเป็น Bashจริง:
# If the current (login) shell is Bash, then
if [ "${BASH_VERSION:-}" ]; then
# source ~/.bashrc if it exists.
if [ -f "$HOME/.bashrc" ]; then
. "$HOME/.bashrc"
fi
fi
ขณะนี้ฉันกำลังวางไฟล์เชลล์สคริปต์และฟังก์ชั่นการทำงานภายใต้การควบคุมเวอร์ชัน ฉันยังเพิ่งเริ่มต้นขั้นตอนการลบ Bashisms สบายจากสคริปต์เปลือกที่ไม่ได้รับประโยชน์จากคุณลักษณะทุบตีเฉพาะเช่นแทนที่ด้วยfunction funcname()
funcname()
สำหรับที่เก็บไฟล์เชลล์ของฉันฉันได้กำหนดค่าฮุคล่วงหน้าที่เรียกใช้checkbashisms
ยูทิลิตี้จากแพ็คเกจ devscriptsของ Debian ในแต่ละsh
ไฟล์ในที่เก็บเพื่อให้แน่ใจว่าฉันไม่ได้แนะนำไวยากรณ์เฉพาะของ Bash โดยไม่ได้ตั้งใจ อย่างไรก็ตามสิ่งนี้ทำให้เกิดข้อผิดพลาดสำหรับ.profile
:
possible bashism in .profile line 51 ($BASH_SOMETHING):
if [ "${BASH_VERSION:-}" ]; then
checkbashisms
ผมสงสัยว่าถ้ามีวิธีการตรวจสอบซึ่งเปลือกกำลังทำงานที่จะไม่เรียกเตือนใน
ฉันตรวจสอบรายการของตัวแปรที่เกี่ยวข้องกับเชลล์ที่ระบุโดย POSIX ด้วยความหวังว่าหนึ่งในนั้นสามารถใช้เพื่อแสดงเชลล์ปัจจุบัน ฉันยังได้ดูตัวแปรที่ตั้งค่าในเชลล์ Dash แบบโต้ตอบ แต่ไม่สามารถหาตัวเลือกที่เหมาะสมได้อีกครั้ง
ในขณะนี้ฉันได้แยกออก.profile
จากการดำเนินการโดยcheckbashisms
; มันเป็นไฟล์เล็ก ๆ ดังนั้นจึงไม่ยากที่จะตรวจสอบด้วยตนเอง อย่างไรก็ตามจากการวิจัยปัญหาฉันยังคงต้องการทราบว่ามีวิธีการที่สอดคล้องกับ POSIX เพื่อตรวจสอบว่าเปลือกใดกำลังทำงานอยู่ (หรืออย่างน้อยวิธีที่ไม่ทำให้เกิดความcheckbashisms
ล้มเหลว)
พื้นหลัง / ชี้แจงเพิ่มเติม
หนึ่งในเหตุผลที่ฉันวางไฟล์การกำหนดค่าเปลือกของฉันภายใต้การควบคุมเวอร์ชันคือการกำหนดค่าสภาพแวดล้อมของฉันในทุกระบบที่ฉันเข้าสู่ระบบเป็นประจำ: Cygwin, Ubuntu และ CentOS (ทั้ง 5 และ 7 โดยใช้ Active Directory สำหรับผู้ใช้ การตรวจสอบ) ฉันมักจะเข้าสู่ระบบผ่านทาง Windows X สภาพแวดล้อมเดสก์ทอป / และ SSH สำหรับโฮสต์ระยะไกล อย่างไรก็ตามฉันต้องการให้สิ่งนี้เป็นข้อพิสูจน์ในอนาคตและมีการพึ่งพาระบบและเครื่องมืออื่น ๆ น้อยที่สุดเท่าที่จะทำได้
ฉันใช้checkbashisms
เป็นวิธีตรวจสุขภาพจิตที่เรียบง่ายแบบอัตโนมัติสำหรับไวยากรณ์ของไฟล์ที่เกี่ยวข้องกับเชลล์ มันไม่ได้เป็นเครื่องมือที่สมบูรณ์แบบเช่นฉันใช้โปรแกรมปะแก้ไปแล้วเพื่อไม่ให้บ่นเกี่ยวกับการใช้งานcommand -v
ในสคริปต์ของฉัน ในขณะที่ทำการค้นคว้าฉันได้เรียนรู้ว่าจุดประสงค์ที่แท้จริงของโปรแกรมคือเพื่อให้แน่ใจว่าสอดคล้องกับนโยบาย Debian ซึ่งตามที่ฉันเข้าใจแล้วนั้นใช้ POSIX 2004 มากกว่า 2008 (หรือการแก้ไข 2013)
.bash_profile
ว่าทั้งมา.profile
และ .bashrc
(ตามเงื่อนไข)