comandos dependendo da entrada std não funcionar corretamente

0

esse é o meu código

bash << EOF
  read
  EOF

aqui, o comando read falha e ele não lê a entrada std

e aqui

bash << EOF
  read
  ls
  ls
  EOF

apenas o segundo ls é executado (o primeiro ls foi redirecionado para read como uma entrada?)

alguém pode me dizer o que estou fazendo errado aqui? todos os comandos que esperam uma entrada da entrada std falhar

    
por lejenome 21.02.2014 / 22:11

1 resposta

1

A sintaxe <<word ("Here documents") redireciona a entrada padrão. Então, o que você fez é iniciar um bash cuja entrada padrão é redirecionada para o "documento aqui". Quando o bash inicializa os filhos (ou executa comandos embutidos), eles herdam a entrada padrão do bash, então eles também estão lendo o documento aqui. (Não há nada particularmente misterioso sobre os documentos aqui. Uma possibilidade de implementação é copiar o documento aqui para um arquivo temporário e, em seguida, redirecionar a entrada padrão para esse arquivo. O Bash pode fazer isso sob certas circunstâncias.)

Redirecionar a entrada padrão não é a única maneira de obter o bash para executar um arquivo. Você pode apenas dar bash o nome do arquivo na linha de comando. Novamente, você não precisa de um arquivo real para que isso funcione; você pode usar a substituição do processo, assim:

bash <(echo '
 read -p "Say it: " A
 echo You said $A
')

Como isso não redireciona a entrada padrão, o read lerá da entrada padrão, não dos comandos alimentados no bash.

Cuidado com os problemas de cotação: eles me morderam duas vezes digitando esse exemplo simples.

    
por 22.02.2014 / 00:43