Eu gostaria de criar um arquivo usando o comando echo e o operador de redirecionamento, o arquivo deve ser composto de algumas linhas.
Tentei incluir uma nova linha "\ n" dentro da string:
echo "first line\nsecond line\nthirdline\n" > foo
mas dessa maneira nenhum arquivo com três linhas é criado, mas um arquivo com apenas uma linha e o conteúdo literal da sequência.
Como posso criar usando apenas este comando um arquivo com várias linhas?
shell
command-line
echo
newlines
Abdul Al Hazred
fonte
fonte
Respostas:
Você solicitou o uso de alguma sintaxe com o
echo
comando:(Mas considere também a outra resposta que você obteve.)
A
$'...'
construção expande seqüências de escape ANSI incorporadas.fonte
O que o eco faz com escapes de caracteres é uma implementação definida. Em muitas implementações de eco (incluindo as mais modernas), a cadeia passada não é examinada em busca de escapes por padrão.
Com o eco fornecido pelo GNU bash (como um builtin) e algumas outras variantes de eco, você pode fazer algo como o seguinte:
No entanto, realmente parece que você deseja
printf
, o que é mais legível aos meus olhos e mais portátil também (ele possui esse recurso definido pelo POSIX):Você também pode considerar usar um documento aqui :
fonte
echo -en 'text..'
, ao passo que a resposta aceita não reconheceu meu caractere de nova linha (\n
), oecho -en
fez.Aqui estão algumas outras maneiras de criar um arquivo de várias linhas usando o
echo
comando:onde o segundo e o terceiro comando usam o
>>
operador de redirecionamento, que faz com que a saída do comando seja anexada (adicionada) ao arquivo (que já deveria existir, neste ponto).Ou
onde os parênteses agrupam os
echo
comandos em um subprocesso, que se parece e age como qualquer programa único que gera várias linhas (comols
, por exemplo).Uma variação sutil acima é
Isso é um pouco mais eficiente que a segunda resposta, pois não cria um subprocesso. No entanto, a sintaxe é um pouco mais complicada: observe que você deve ter um espaço após o
{
ponto-e-vírgula antes do}
.Consulte Quais são os operadores de controle e redirecionamento do shell? Para maiores informações.
fonte
Para dar mais uma opção, basta clicar Enter (uma nova linha literal):
Observe que você não digita o
>
no início da segunda linha. Esse é o prompt do shell secundário$PS2
, que o shell imprime quando você digita um comando incompleto (por exemplo, neste caso, um comando com um caractere de aspas sem comparação).fonte
O POSIX 7 diz que você não pode
http://pubs.opengroup.org/onlinepubs/9699919799/utilities/echo.html
-e
não está definido e as barras invertidas são definidas para implementação:a menos que você tenha uma extensão XSI opcional.
Então use
printf
:a notação de formato de arquivo :
Lembre-se também de que o Ubuntu 15.10 e a maioria das distribuições implementam
echo
ambos como:help echo
which echo
o que pode levar a alguma confusão.
fonte
echo
embutido em cada shell disponível no sistema. No Ubuntu / bin / sh é geralmente traço, o bash também vem por padrão. zsh, rc, mksh, yash, csh, tcsh, ksh93 ... todos terão seu próprio eco com comportamento diferente. Observe quewhich echo
não fornecerá o caminho do eco do sistema em todos os shells.which
era originalmente (nos anos 80) um script csh apenas para usuários csh (carregava os aliases de ~ / .cshrc) e ainda está em alguns sistemas.which
é um builtin no zsh e no tcsh.