GNU/Linux >> Belajar Linux >  >> Linux

Bagaimana Cara Mendapatkan Versi Ksh dengan Aman?

Bagaimana saya bisa dengan aman dapatkan versi ksh dari dalam skrip ksh?

Saya telah melihat solusi berikut:

  1. ksh --version
  2. echo ${.sh.version}
  3. echo $KSH_VERSION

Dan mengingat keadaan yang tepat, masing-masing bekerja dengan benar. Namun, saya peduli dengan kasus yang tidak sempurna.

Secara khusus, ada beberapa mesin yang bekerja dengan saya yang memiliki versi ksh yang lebih lama yang, untuk tujuan saya, sangat kurang dalam fungsionalitas. Bagaimanapun, alasan saya ingin memeriksa versi (secara terprogram) adalah untuk melihat apakah versi ksh adalah salah satu versi yang kurang mampu; dan jika demikian, saya ingin menjalankan cabang dengan kode yang kurang menarik.

Namun, pada mesin yang bermasalah, ketidakmampuan shell meluas hingga memeriksa versi…

  • Jika saya mencoba ksh --version , itu tidak mencetak apa pun dan membuka instance baru ksh !
  • Jika saya mencoba echo ${.sh.version} , ksh memperlakukan ini sebagai kesalahan sintaks yang tidak dapat dibuang dengan 2> /dev/null .

    $ echo ${.sh.version} 2> /dev/null  
    ksh: ${.sh.version}: bad substitution
    
  • Tentu saja echo $KSH_VERSION tampaknya berfungsi dengan baik - maksud saya itu tidak akan macet - meskipun pada mesin ini kosong. Juga, saya melihat di suatu tempat bahwa KSH_VERSION hanya disetel oleh pdksh .

Pertanyaan:

  • Bagaimana cara memeriksa versi ksh dengan aman secara terprogram? Untuk tujuan saya di sini, saya tidak terlalu peduli apa nomor versi sebenarnya, hanya apakah itu versi lama dari ksh .
  • Apakah $KSH_VERSION cukup baik? Maksud saya jika kosong, maka ksh tentu versi yang sudah ketinggalan zaman? Apakah forum lain itu benar sehingga mungkin tidak disetel bahkan untuk versi ksh yang lebih baru ?
  • Apakah tidak ada cara untuk memeriksa ini sama sekali?

Jawaban yang Diterima:

KSH_VERSION tidak diimplementasikan di ksh93 sebelum versi 93t. Ini akan diatur dalam mksh , pdksh , lksh . Jadi untuk memeriksa versi ksh , kita bisa mencoba langkah berikut:

  • Memeriksa KSH_VERSION untuk mendeteksi mksh , pdksh , lksh
  • Jika langkah pertama gagal, coba fitur yang berbeda antara ksh93 dan ksh88/86 (Biarkan David Korn menunjukkannya kepada kita).

Dengan pemikiran ini, saya akan pergi dengan:

case "$KSH_VERSION" in
  (*MIRBSD*|*PD*|*LEGACY*) printf '%sn' "$KSH_VERSION" ;;
  (*) [ -z "$ERRNO" ] && printf '%sn' "${.sh.version}" || echo ksh88/86 ;;
esac

Linux
  1. Bagaimana cara mendapatkan nama pengguna di Makefile?

  2. Bagaimana cara mendapatkan PYTHONPATH di shell?

  3. Bagaimana cara mendapatkan ID proses untuk mematikan proses nohup?

  1. Cara memeriksa Versi OS dan Linux

  2. Bagaimana Agar Uuencode Berfungsi?

  3. Bagaimana Cara Mendapatkan Versi Terbaru Winetricks Di Ubuntu?

  1. Cara Memeriksa Versi MySQL di Linux

  2. Cara mendapatkan ukuran file tar.gz dalam (MB) dengan python

  3. Bagaimana cara mendapatkan versi driver nvidia dari baris perintah?