Como posso criar um arquivo com várias linhas a partir da linha de comando? [duplicado]

10

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

Hi
abcd

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

    
por Novice User 02.04.2012 / 17:39

6 respostas

14

Você precisa dizer echo para honrar sequências de escape.

echo -e "Hi\nabcd" >> ab.txt
    
por 02.04.2012 / 17:43
12

O comportamento de echo varia de shell para shell¹; O comportamento do printf é mais padronizado.

printf "Hi\nabcd" >> ab.txt

It "Não é possível usar echo portável em todos os sistemas POSIX a menos que ambos -n (como o primeiro argumento) e sequências de escape sejam omitidos."

    
por 02.04.2012 / 19:53
6

Você também pode fazer cat > file , digitar e pressionar Ctrl-D quando terminar.

    
por 02.04.2012 / 21:02
5

Você também pode jogar com cotações:

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

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

    
por 02.04.2012 / 18:00
4

Eu sugeriria usar o bash recurso de shell chamado aqui documento . Parece a forma mais elegante de conseguir o que você descreve. O mais importante é que o conteúdo de múltiplas linhas é exatamente igual ao que você teria no arquivo de saída (em oposição às cadeias separadas ilegíveis, longas, \n ).

cat > ab.txt <<EOL
Hi
abcd
EOL

O EOL aqui é o marcador que informa o que o shell deve procurar para encontrar o fim do documento aqui . Você pode escolher arbitrariamente uma palavra que lhe permite escolher algo que não conflituará coincidentemente com o próprio conteúdo do documento . O bom é que você poderia ter o shell ${VARIABLES} , que será substituído. Se isso é de alguma forma indesejado, você pode sempre quebrar a palavra do marcador de abertura (apenas a abertura!) Com aspas ( ' ) para evitar isso.

Eu pessoalmente uso muito isso nos scripts de init 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
    
por 25.11.2015 / 13:05
0
cp /dev/tty file

pressione enter. então comece a digitar. continue digitando o quanto quiser. Quando você tiver preenchido todos os tipos de digitação, digite sua string EOF tty. isso geralmente é enviado com CTRL+D . agora, talvez, aperte mais uma vez. você está feito.

    
por 25.11.2015 / 13:30