Como forçar o Perl a usar / bin / ksh em vez de / bin / sh?

1

Estou migrando do AIX para o Solaris 10, mas a versão do /bin/sh é tão antiga que nossos scripts não funcionam. Posso de alguma forma forçar o perl a executar comandos em '' via shell diferente (no meu caso, /bin/ksh )?

Eu tenho MUITOS lugares com chamadas de sistema, então mudá-los em todos os lugares não é muito viável. Seria ótimo encontrar algum cenário global ou algo assim.

    
por BarsMonster 19.08.2010 / 13:30

4 respostas

5

Para obter um ambiente POSIX no Solaris, você precisa colocar o diretório de conformidade padrão ( /usr/xpg6/bin , o número pode ser diferente em versões diferentes do Solaris) no início de seu PATH , antes de /usr/bin ou /bin . Há um sh em conformidade com o POSIX lá (é ksh , de fato), e alguns utilitários reagem diferentemente dependendo do $PATH , mesmo que eles estejam em um único executável.

Codifique os diretórios:

my @xpg_dirs = glob('/usr/xpg[0-9]/bin /usr/xpg[0-9][0-9]/bin');
$ENV{PATH} = "$xpg_dirs[@xpg_dirs-1]:$ENV{PATH}" if @xpg_dirs;

ou impor um PATH padrão com getconf (o que estranhamente não está no módulo POSIX ):

$ENV{PATH} = 'getconf PATH';
chomp($ENV{PATH});
    
por 19.08.2010 / 14:02
0

Veja este tópico no Stack Overflow.

    
por 19.08.2010 / 13:38
0

Um pensamento que pode ajudar:

Você pode atualizar / bin / sh para a mesma versão que estava em seu antigo servidor AIX, onde eles funcionavam anteriormente. O comportamento perl não mudou, apenas sua versão de / bin / sh

    
por 19.08.2010 / 14:05
0

Você pode usar shebang assim

#!/bin/ksh

adicione / repale o acima na primeira linha do script. Ele usa o / bin / ksh para executar o script.

    
por 19.08.2010 / 13:45