Làm cách nào tôi có thể lấy phiên bản ksh một cách an toàn từ trong tập lệnh ksh?
Tôi đã thấy các giải pháp sau đây :
ksh --version
echo ${.sh.version}
echo $KSH_VERSION
Và đưa ra các trường hợp phù hợp, mỗi trong số này hoạt động chính xác. Tuy nhiên, tôi quan tâm đến trường hợp không hoàn hảo.
Cụ thể, có một số máy tôi làm việc với các phiên bản cũ hơn của ksh, với mục đích của tôi, thiếu nghiêm trọng về chức năng. Dù sao, lý do tôi muốn kiểm tra phiên bản (lập trình) là để xem phiên bản ksh có phải là một trong những phiên bản ít khả năng hơn không; và nếu vậy, tôi muốn thực thi một nhánh với mã ít tuyệt vời hơn.
Tuy nhiên, trên các máy có vấn đề, sự bất lực của vỏ mở rộng đến việc kiểm tra phiên bản ...
- Nếu tôi thử
ksh --version
, nó không in gì cả và mở một ví dụ mớiksh
! Nếu tôi thử
echo ${.sh.version}
,ksh
coi đây là lỗi cú pháp không thể loại bỏ2> /dev/null
.$ echo ${.sh.version} 2> /dev/null ksh: ${.sh.version}: bad substitution
Tất nhiên có
echo $KSH_VERSION
vẻ hoạt động tốt - ý tôi là nó sẽ không gặp sự cố - mặc dù trên các máy này nó trống. Ngoài ra, tôi thấy một nơi nào đó chỉKSH_VERSION
được thiết lập bởipdksh
.
Câu hỏi:
- Làm thế nào tôi có thể kiểm tra phiên bản
ksh
lập trình một cách an toàn ? Đối với mục đích của tôi ở đây, tôi không thực sự quan tâm số phiên bản thực tế là gì, chỉ là liệu đó có phải là phiên bản lỗi thời hay khôngksh
. - Là
$KSH_VERSION
đủ tốt? Ý tôi là nếu nó trống, thìksh
nhất thiết phải là một phiên bản lỗi thời? Có phải diễn đàn khác đã đúng rằng nó có thể không được đặt ngay cả đối với các phiên bản mới hơnksh
? - Có cách nào để kiểm tra điều này không?
PS1
để sử dụng chức năng này. Tuy nhiên, Old ksh không hỗ trợ $()
trong PS1
. Vì vậy, nếu đó là phiên bản hiện đại của ksh, tôi muốn PS1
sử dụng chức năng tôi đã tạo; Nếu đó là phiên bản cũ, tôi chỉ sử dụng $PWD
.