ฉันจะรับรุ่น ksh อย่างปลอดภัยจากภายในสคริปต์ ksh ได้อย่างไร
ฉันได้เห็นวิธีแก้ไขปัญหาต่อไปนี้ :
ksh --versionecho ${.sh.version}echo $KSH_VERSION
และเมื่อได้รับสถานการณ์ที่เหมาะสมแต่ละงานเหล่านี้ถูกต้อง อย่างไรก็ตามฉันสนใจกรณีที่ไม่สมบูรณ์
โดยเฉพาะมีหลายเครื่องที่ฉันทำงานด้วยที่มีรุ่นเก่ากว่า ksh ที่สำหรับวัตถุประสงค์ของฉันขาดฟังก์ชั่นอย่างรุนแรง อย่างไรก็ตามเหตุผลที่ฉันต้องการตรวจสอบรุ่น (โดยทางโปรแกรม) คือดูว่ารุ่น ksh เป็นหนึ่งในรุ่นที่มีความสามารถน้อยกว่าหรือไม่ และถ้าเป็นเช่นนั้นฉันต้องการรันสาขาด้วยรหัสที่ยอดเยี่ยมน้อยลง
อย่างไรก็ตามในเครื่องที่มีปัญหาความไม่สมบูรณ์ของเชลล์จะขยายไปสู่การตรวจสอบเวอร์ชัน ...
- ถ้าฉันลอง
ksh --versionมันจะพิมพ์ออกมาและเปิดตัวอย่างใหม่ของksh! หากฉันลอง
echo ${.sh.version}ให้kshถือว่านี่เป็นข้อผิดพลาดทางไวยากรณ์ที่ไม่สามารถทิ้ง2> /dev/nullได้$ echo ${.sh.version} 2> /dev/null ksh: ${.sh.version}: bad substitutionแน่นอน
echo $KSH_VERSIONว่าใช้งานได้ดี - ฉันหมายความว่ามันจะไม่ผิดพลาด - แม้ว่าเครื่องเหล่านี้จะว่างเปล่า นอกจากนี้ผมเห็นที่ไหนสักแห่งที่มีการตั้งค่าโดยเฉพาะKSH_VERSIONpdksh
คำถาม:
- ฉันจะตรวจสอบเวอร์ชั่นของ
kshโปรแกรมอย่างปลอดภัยได้อย่างไรkshสำหรับวัตถุประสงค์ของฉันที่นี่ฉันไม่สนใจสิ่งที่หมายเลขรุ่นที่เกิดขึ้นจริงเป็นเพียงแค่ไม่ว่าจะเป็นรุ่นเก่า - คือ
$KSH_VERSIONพอดีหรือไม่? ฉันหมายถึงถ้ามันว่างเปล่าkshจำเป็นต้องเป็นรุ่นที่ล้าสมัยหรือไม่? ฟอรัมอื่นถูกต้องหรือไม่ที่อาจไม่ได้ตั้งไว้สำหรับรุ่นที่ใหม่กว่าksh? - ไม่มีวิธีตรวจสอบเลยใช่ไหม?
PS1ให้ใช้ฟังก์ชั่นนี้ อย่างไรก็ตาม ksh เก่าไม่สนับสนุนใน$() PS1ดังนั้นหากเป็นรุ่นที่ทันสมัยของ ksh ฉันต้องการPS1ใช้ฟังก์ชันที่ฉันสร้างขึ้น $PWDถ้าหากมันเป็นรุ่นเก่าผมใช้เพียง