Como posso criar um arquivo com várias linhas na linha de comando?

Como posso criar um arquivo com várias linhas na linha de comando?

Como posso inserir o seguinte conteúdo em um arquivo:

Hi
abcd

Tentei usar echo "Hi\nabcd" >> ab.txt, mas no arquivo está escrito como está ( \nestá incluído, em vez de uma nova linha)

Responder1

Você precisa dizer echopara honrar as sequências de escape.

echo -e "Hi\nabcd" >> ab.txt

Responder2

O comportamento deechovaria de shell para shell¹;printfO comportamento de é mais padrão.

printf "Hi\nabcd" >> ab.txt

¹ "Não é possível usarecoportável em todos os sistemas POSIX, a menos que ambos-n(como o primeiro argumento) e sequências de escape são omitidas."

Responder3

Eu sugeriria usarrecurso bash shell chamadoAqui Documento. Parece a forma mais elegante de conseguir o que você descreve. Mais importante ainda, o conteúdo multilinha parece exatamente da mesma maneira que você teria no arquivo de saída (em oposição a \nstrings ilegíveis, longas e separadas).

cat > ab.txt <<EOL
Hi
abcd
EOL

Aqui EOLestá o marcador que informa o que o shell deve procurar para encontrar o final doaqui documento. Você pode escolher arbitrariamente uma palavra que permita escolher algo que não entre em conflito coincidentemente com oaqui documentoo próprio conteúdo. O legal é que você pode ter um shell ${VARIABLES}que será substituído. Se isso for indesejado, você sempre pode colocar a palavra do marcador de abertura (apenas a de abertura!) Com aspas ( ') para evitá-lo.

Eu pessoalmente uso muito isso nos scripts de inicialização para criar pequenos arquivos de configuração ao configurar meu ambiente, algo como:

cat > ~/.screenrc <<END_OF_HEREDOC_MARKER
defscrollback ${MAX_LINES}
END_OF_HEREDOC_MARKER

Responder4

Você também pode brincar com citações:

 % echo 'Hi
> abcd' >> ab.txt

Você digita isso no bash pressionando "Enter" depois de "Hi". Bash usa '>' como prompt de continuação de comando para mim. Não consegui escapar de um retorno individual com uma barra invertida por algum motivo.

informação relacionada