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

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
Brasil Linux
Brasil Linux
2 873 dos participantes

O primeiro e grande grupo sobre LINUX do Telegram, que temos como base o S.O. GNU/Linux, que vai de usuários iniciantes / avançados! Vejam nossos parceiros: http://urele.com/parceiros Desde: 16/11/2015

Técnicos em Informática
Técnicos em Informática
2 517 dos participantes

Um grupo com foco em assuntos técnicos, hardware, servidores e resolução de problemas em Windows e Linux. Canal: @dicasdeti

Linux
Linux
1 950 dos participantes

Grupo focado para compartilhar conhecimentos e tirar dúvidas sobre Linux + LPIC.Proibido a divulgação de materiais copyright e pirataria.Bot: @GrupoLinuxbot . Link: https://goo.gl/KQYqhN Steam: https://goo.gl/KgQ0yH Estatísticas: https://goo.gl/Ld1BKM

SysAdmin Brasil Linux
SysAdmin Brasil Linux
320 dos participantes

Sysadmin é o profissional responsável pelo ambiente de TI de uma organização. Isso normalmente compreende servidores, equipamentos de rede, acesso à Internet, serviços ao usuário, banco de dados, segurança e outros. Grupo parceiro: @BrasilLinux 23/06/17