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á ( \n
está incluído, em vez de uma nova linha)
Responder1
Você precisa dizer echo
para honrar as sequências de escape.
echo -e "Hi\nabcd" >> ab.txt
Responder2
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 \n
strings ilegíveis, longas e separadas).
cat > ab.txt <<EOL
Hi
abcd
EOL
Aqui EOL
está 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.