RIDUZIONE:Come superare un'incompatibilità tra ksh su Linux vs.quello installato su AIX/Solaris/HPUX?

StackOverflow https://stackoverflow.com/questions/96133

Domanda

Ho scoperto un altro problema nello sforzo che stiamo facendo per trasferire diverse centinaia di script ksh da AIX, Solaris e HPUX a Linux.Vedere Qui per il problema precedente.

Questo codice:

#!/bin/ksh
if [ -a k* ]; then
    echo "Oh yeah!"
else
    echo "No way!"
fi
exit 0

(Se eseguito in una directory con diversi file il cui nome inizia con K) produce "Oh sì!" quando sono stati chiamati con le varianti AT&T KSH (KSH88 e KSH93).D'altra parte produce e un messaggio di errore seguito da "Nessun modo!" sulle altre varianti KSH (PDKSH, MKS KSH e BASH).

Ancora una volta, la mia domanda è:

  • Esiste una variabile di ambiente che farà sì che pdksh si comporti come ksh93?In caso contrario:
  • Esiste un'opzione su pdksh per ottenere il comportamento richiesto?
È stato utile?

Soluzione 2

Ebbene dopo un anno sembra che non ci sia soluzione al mio problema.

Aggiungo questa risposta per dire che dovrò conviverci......

Altri suggerimenti

Non userei più pdksh su Linux.Da quando AT&T ksh è diventato OpenSource, sono disponibili pacchetti dalle varie distribuzioni Linux.Per esempio.RedHat Enterprise Linux e CentOS includono ksh93 come pacchetto RPM "ksh".

pdksh è ancora menzionato in molte documentazioni sui requisiti di installazione dei fornitori di software.Abbiamo sostituito pdksh su tutti i nostri sistemi Linux con ksh93 senza problemi finora.

in Bash l'operazione test -a è per un singolo file.

Immagino che in Ksh88 l'operazione test -a sia per un singolo file, ma non si lamenta perché le altre parole di test sono una condizione non specificata per -a.

vuoi qualcosa del genere

for K in /etc/rc2.d/K* ; do test -a $K && echo heck-yea ; done

Posso dire che ksh93 funziona proprio come bash a questo proposito.Purtroppo penso che il codice sia stato scritto male, la mia opinione, e probabilmente una cattiva opinione poiché la causa principale del problema è il test integrato di ksh88 che consente un codice sciatto.

Ti rendi conto che [ è un alias (spesso un collegamento, simbolico o difficile) per /usr/bin/test, Giusto?Quindi forse il vero problema sono le diverse versioni di /usr/bin/test ?

OTOH, ksh lo sovrascrive con un file builtin.Forse c'è un modo per far sì che non lo faccia?o forse puoi esplicitamente alias [to /usr/bin/test, Se /usr/bin/test su tutte le piattaforme è compatibile?

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top