O que há de errado com a minha instalação do Linux se meu script não for executado com as seguintes mensagens de erro

0

Tentando executar alguns scripts .sh em uma instalação muito reduzida do Ubuntu, mas estou recebendo mensagens do seguinte estilo:

./my_script: 61: [[: not found
./my_script: 61: ==: not found
./my_script: 61: ==: not found
./my_script: 61: ==: not found
./my_script: 67: [[: not found
./my_script: 73: [[: not found

Existe obviamente algo que não está certo:)

O script começa com:

#!/bin/sh

Editar

Funciona bem se eu começar assim:

bash ./my_script

Editar 2

Desculpe, essa foi uma pergunta estúpida sem mais explicações :) Esse script funciona bem, inalterado, em algumas máquinas RHEL - o que eu preciso alterar na caixa do Ubuntu para fazer o script funcionar, sem modificar o script ?

    
por Rich 08.12.2010 / 14:58

2 respostas

1

Você precisa tornar o /bin/sh um link simbólico para /bin/bash :

$ cd /bin
$ sudo ln -sf bash sh

Essa opção pode ter efeitos colaterais desconhecidos, pois a alteração desse link simbólico faz com que /bin/bash seja usado para a execução de scripts do sistema, em vez de /bin/dash . . Se desejar, você sempre pode voltar para o arranjo de links original.

O Ubuntu personalizou seu shell padrão um pouco:

-rwxr-xr-x 1 root root 801808 2010-08-10 15:58 bash
-rwxr-xr-x 1 root root 87984 2010-06-24 16:01 dash
lrwxrwxrwx 1 root root 4 2010-10-16 21:58 rbash -> bash
lrwxrwxrwx 1 root root 4 2010-10-16 21:58 sh -> dash
lrwxrwxrwx 1 root root 4 2010-10-16 21:58 sh.distrib -> bash
lrwxrwxrwx 1 root root 7 2010-10-16 21:58 static-sh -> busybox

É apenas um symlink de qualquer maneira. Se quebrar alguma coisa, você precisa alterá-lo de volta.

Alguns usuários fazem isso desde 2007 e tiveram pouco efeito colateral negativo. Eu não poderia chamar isso de insanidade.

    
por 08.12.2010 / 15:05
4

A diferença parece óbvia:

  • Quando você digita bash , executa bash .
  • Quando você digita ./myscript , ele executa sh (a linha #! ).

Se o script usar os recursos bash específicos, ele deverá começar com #!/bin/bash (ou talvez #!/usr/bin/env bash ).

    
por 08.12.2010 / 15:11