Diferentes formas de executar um script de shell

0

Existem algumas perguntas semelhantes que eu já vi, mas descobri algo diferente.

Estou lendo este link e fiquei confuso quando li:

"Não recomendado é usar

sh scriptname

, pois isso efetivamente desativa a leitura de stdin dentro do script. "

Há duas coisas aqui: primeiro, tentei executar um script como

sh myscript.sh < file.txt

e lê de stdin fine.

A segunda coisa é que eu entendo que adicionar shebang no topo do script

#!/bin/bash

significa exatamente o mesmo que

bash myscript.sh

, então eu não entendo o que o autor está apontando lá. Eu fiquei confuso.

Qualquer pessoa que entenda qual é o argumento do autor?

Muito obrigado antecipadamente.

    
por user3212942 23.04.2014 / 12:40

2 respostas

2

Você tem um erro de digitação em sua cotação - deve começar com "Não recomendado está usando sh <scriptname ", que envia uma entrada padrão para sh em vez de scriptname .

    
por 23.04.2014 / 13:30
1

O #!/bin/bash no topo do script é útil apenas para executá-lo, digitando diretamente o nome:

$ ./scriptname

Esse método também requer que a permissão de execução do arquivo seja definida. De fato, quando você executa um arquivo, ele é escrito em assembly language ou o interpretador é especificado no arquivo, seguindo a convenção #! :

#!/path/to_the/interpreter

A menos que eu esteja enganado, arquivos de texto que não podem conter tal linha (devido à gramática do idioma em que estão escritos) não podem ser executados dessa maneira.
A única outra maneira para esse arquivo é passar o nome do arquivo como um argumento para o interpretador. A principal vantagem desse segundo método é que ele não exige que o arquivo seja executável para o usuário, mas apenas legível.

Para a sua primeira pergunta, o l0b0 é o certo, você interpretou mal.

    
por 23.04.2014 / 20:23