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
.
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.
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
.
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.