GNU/Linux >> Znalost Linux >  >> Linux

Jak bezpečně získat verzi Ksh?

Jak mohu bezpečně získat verzi ksh ze skriptu ksh?

Viděl jsem následující řešení:

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

A za správných okolností každá z nich funguje správně. Nicméně mě zajímá ten nedokonalý případ.

Konkrétně existuje několik strojů, se kterými pracuji a které mají starší verze ksh, které pro mé účely výrazně postrádají funkčnost. Každopádně důvodem, proč chci verzi zkontrolovat (programově), je zjistit, zda verze ksh není jednou z méně schopných verzí; a pokud ano, chci spustit větev s méně úžasným kódem.

Na problematických strojích se však nešikovnost shellu rozšiřuje i do kontroly verze…

  • Pokud zkusím ksh --version , nevytiskne nic a otevře novou instanci ksh !
  • Pokud zkusím echo ${.sh.version} , ksh považuje to za chybu syntaxe, kterou nelze zahodit pomocí 2> /dev/null .

    $ echo ${.sh.version} 2> /dev/null  
    ksh: ${.sh.version}: bad substitution
    
  • Samozřejmě echo $KSH_VERSION Zdá se, že funguje dobře – myslím, že nespadne – i když na těchto počítačích je prázdný. Také jsem někde viděl, že KSH_VERSION nastavuje pouze pdksh .

Otázky:

  • Jak mohu bezpečně zkontrolovat verzi ksh programově? Pro mé účely mě opravdu nezajímá, jaké je skutečné číslo verze, ale zda se nejedná o zastaralou verzi ksh .
  • Je $KSH_VERSION dostatečně dobrý? Myslím tím, že pokud je prázdné, pak je ksh nutně zastaralá verze? Bylo to jiné fórum správné, že nemusí být nastaveno ani pro novější verze ksh ?
  • Neexistuje žádný způsob, jak to vůbec zkontrolovat?

Přijatá odpověď:

KSH_VERSION nebyl implementován v ksh93 před verzí 93t. Bude nastaveno v mksh , pdksh , lksh . Takže pro kontrolu verze ksh , můžeme zkusit tyto kroky:

  • Kontrola KSH_VERSION k detekci mksh , pdksh , lksh
  • Pokud první krok selže, vyzkoušejte funkci, která se liší od ksh93 a ksh88/86 (Ať nám to ukáže David Korn).

S ohledem na tyto skutečnosti půjdu s:

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

Linux
  1. Jak zkontrolovat verzi OS a Linuxu

  2. Jak zajistit, aby Uuencode fungoval?

  3. Jak získat nejnovější verzi Winetricks na Ubuntu?

  1. Jak získat klíč USB k automatickému připojení?

  2. Jak zkontrolovat verzi MySQL v Linuxu

  3. Jak získat verzi ovladače nvidia z příkazového řádku?

  1. Jak získat stav ukončení smyčky v bash

  2. Jak získat PYTHONPATH v shellu?

  3. Jak získat ID procesu pro ukončení procesu nohup?