Confuso sobre o significado de um shell interativo e não interativo ao executar um script

1

Eu li o seguinte neste pergunta :

A shell running a script is always a non-interactive shell, but the script can emulate an interactive shell by prompting the user to input values.

Eu não sei se a afirmação acima está correta, pensei que o seguinte está correto:

  • Um shell executando um script e esse script permite que você insira dados é um shell interativo (e não uma "emulação" de um shell interativo, como diz a citação).

  • Um shell executando um script e esse script não permite que você insira dados é um shell não interativo.

Qual afirmação está correta?

    
por Tom 23.09.2017 / 17:45

2 respostas

1

Um shell executando um script é um shell não interativo.

Um shell não interativo ainda pode usar, e. read para ler dados da entrada padrão.

Se a entrada padrão for um terminal, isso pode fornecer um nível de "interação", mas não faz com que o shell que está executando o script seja um shell interativo. O script será "interativo".

O texto é confuso porque usa a palavra "interativo" para significar duas coisas:

  1. Um shell que foi iniciado para executar um script de shell não é interativo (no sentido de que não possui controle de tarefa, ele não fornece um prompt por si só por padrão etc. etc.). Este é um termo técnico para o tipo de shell, assim como "shell de login" e "shell interativo".
  2. A ação de adquirir dados por este mesmo script pode ser "interativa" (se não estiver lendo, por exemplo, um canal ou um arquivo). Mas, novamente, qualquer comando que extraia dados da entrada padrão pode ser considerado interativo. tr 'a-z' 'A-Z' , por si só, "interativamente" transformará todos os caracteres ASCII em letras minúsculas em maiúsculas.
por 23.09.2017 / 17:50
0

Escreva um script abaixo simples vi non-intractive.sh .

#!/bin/bash
echo "Hello World!"

salve e execute bash non-interactive.sh ; este era um bash shell que executava um script e era um shell não interativo.

Agora escreva outro script simples vi interactive.sh .

#!/bin/bash
echo "Please input things:"
read userinput
echo "You input: $userinput!"

salve e execute bash interactive.sh , insira uma entrada e aperte enter; este foi um bash shell executou um script que era shell interativo.

    
por 23.09.2017 / 17:54