Como o “comando filename.txt” aparece ao passar o nome do arquivo para um comando

0

Eu tenho um cenário em que tenho command < filename.txt para poder passar o conteúdo de filename.txt e usá-lo em command . Mas digamos que eu queira retirar o conteúdo do arquivo e usá-los apenas em uma ação de linha de comando. Como seria?

Diga que o conteúdo de filename.txt é o seguinte:

To: [email protected]
Message: Some message

Eu tentei coisas como command "To: [email protected]\n Message: Some message" sem sorte. Como o conteúdo de um arquivo de texto aparece quando eles são analisados em um comando dessa maneira?

    
por Joshua Terrill 20.05.2015 / 06:38

2 respostas

3

No seu cenário, command está lendo a entrada padrão; a menos que aceite alguma outra maneira de fornecer essa informação, você precisa continuar alimentando sua entrada dessa maneira. Portanto, se você não quiser usar um arquivo, use printf com um cano:

printf "To: [email protected]\nMessage: Some message" | command
    
por 20.05.2015 / 06:52
1

New-ish shells como bash e ksh93 suportam "here documents" e "here strings" se você quiser que strings literais sejam passadas para o seu comando no STDIN. Na verdade, a maioria dos shells suporta documentos aqui.

Aqui string:

command <<<"some string"

Aqui documento:

command <<END
this will be on
command's STDIN until
an END is encountered by itself
END

O documento aqui usa a coisa depois do << como o terminador, sinalizando o final do documento. O terminador deve ocorrer sozinho no início de uma linha. Shells diferentes têm possibilidades um pouco mais sofisticadas, como remover opcionalmente guias principais, aspas diferentes no terminador controlando se variáveis e metacaracteres de shell são expandidos, etc. Verifique a página do manual do seu shell para obter detalhes.

Em qualquer caso, você pode testar facilmente essas duas estruturas usando cat - como o comando. Eu pessoalmente me encontro usando aqui strings com muita frequência.

    
por 13.10.2016 / 20:20