REDUX: Como superar uma incompatibilidade entre o ksh no Linux vs. que instalado no AIX / Solaris / HPUX?

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

Pergunta

Eu descobriram outro problema no esforço que estamos a fazer para a porta várias centenas de scripts de ksh de AIX, Solaris e HPUX para Linux. Consulte aqui para o problema anterior.

Este código:

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

(quando executado em um diretório com vários arquivos cujos arranques nome com k) produz "Oh yeah!" quando chamado com a AT & T ksh variantes (ksh88 e ksh93). Por outro lado, produz e mensagem de erro seguido por "De jeito nenhum!" por outro ksh variantes (pdksh, MKS ksh e bash).

Mais uma vez, a minha pergunta é:

  • Existe uma variável de ambiente que fará com que pdksh a se comportar como ksh93? Falhando isso:
  • Existe uma opção no pdksh para obter o comportamento desejado?
Foi útil?

Solução 2

Bem depois de um ano parece haver nenhuma solução para o meu problema.

Estou adicionando esta resposta para dizer que vou ter que viver com isso ......

Outras dicas

Eu não usaria pdksh no Linux mais. Desde AT & T ksh tornou-se OpenSource há pacotes disponíveis a partir das várias distribuições Linux. Por exemplo. RedHat Enterprise Linux e CentOS incluem ksh93 como o pacote RPM "ksh".

pdksh ainda é mencionado em muitas documentações exigência de instalação de fornecedores de software. Nós substituímos pdksh em todos os nossos sistemas Linux com ksh93 sem problemas até agora.

em Bash a operação de teste -a é para um único arquivo.

Eu estou supondo que no ksh88 a operação de teste -a é para um único arquivo, mas não se queixa porque as outras palavras de teste são uma condição não especificada ao -a.

Você quer algo como

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

Eu posso dizer que ksh93 funciona exatamente como o bash a este respeito. Infelizmente eu acho que o código foi escrito mal, a minha opinião, e provavelmente uma opinião ruim, já que a causa raiz do problema é o ksh88 built-in teste permitindo código desleixado.

Você percebe que [é um apelido (muitas vezes um link, simbólica ou disco) para /usr/bin/test, certo? Então, talvez o problema real é versões diferentes de /usr/bin/test?

OTOH, substituições ksh-lo com um builtin. Talvez haja uma maneira de obtê-lo a não fazer isso? ou talvez você pode explicitamente pseudônimo [para /usr/bin/test, se /usr/bin/test em todas as plataformas é compatível?

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top