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

Descobri outro problema no esforço que estamos fazendo para portar várias centenas de scripts ksh do AIX, Solaris e HPUX para o Linux. Veja aqui para o problema anterior.

Este código:

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

(when run in a directory with several files whose name starts with k) produces "Oh yeah!" when called with the AT&T ksh variants (ksh88 and ksh93). On the other hand it produces and error message followed by "No way!" on the other ksh variants (pdksh, MKS ksh and bash).

Mais uma vez, minha pergunta é:

  • Existe uma variável de ambiente que fará com que o pdksh se comporte como o ksh93? Caso contrário:
  • Existe uma opção no pdksh para obter o comportamento necessário?
0
adicionado editado
Visualizações: 1

4 Respostas

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

Eu estou adicionando esta resposta para dizer que eu vou ter que viver com isso ......

0
adicionado

Você percebe que [é um alias (geralmente um link, simbólico ou hard) para /usr/bin/test , certo? Então talvez o problema real seja versões diferentes de /usr/bin/test ?

OTOH, ksh substitui-lo por um builtin. Talvez haja uma maneira de fazer isso não? ou talvez você possa explicitamente apelidar [para /usr/bin/test , se /usr/bin/test em todas as plataformas for compatível?

0
adicionado
[é um comando embutido no ksh93 e pdksh.
adicionado o autor Andrew Stein, fonte

I wouldn't use pdksh on Linux anymore. Since AT&T ksh has become OpenSource there are packages available from the various Linux distributions. E.g. RedHat Enterprise Linux and CentOS include ksh93 as the "ksh" RPM package.

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

0
adicionado

no Bash, o teste -a operação é para um único arquivo.

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

você quer algo parecido

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

Eu posso dizer que o ksh93 funciona exatamente como o bash a esse respeito. Infelizmente eu acho que o código foi escrito mal, minha opinião e, provavelmente, uma má opinião desde a causa raiz do problema é o teste embutido ksh88 permitindo código desleixado.

0
adicionado