Como coloco texto longo no shell?

2

por exemplo

$ gcc -Wall abc.c

$ ./a.out <font name="Moronicity" size=12><!-- ignore this comment --><i></i>
<div style="aa">hello</div></font><img src="spacer.gif">
<div style="bb"><img src="spacer.gif"></div>

-bash: erro de sintaxe próximo do token inesperado '<'

Continuar recebendo esse erro

    
por Tinler 24.02.2018 / 02:10

2 respostas

6

Você poderia usar caracteres de escape antes de cada caractere especial ( < , [ , > , ] ), mas seria um pouco complicado nesse caso. Em vez disso, você pode simplesmente cercar o argumento inteiro com aspas simples da seguinte forma:

$ ./a.out '<font name="Moronicity" size=12><!-- ignore this comment --><i></i>
<div style="aa">hello</div></font><img src="spacer.gif">
<div style="bb"><img src="spacer.gif"></div>'

Outra opção é colocar a string de parâmetro

<font name="Moronicity" size=12><!-- ignore this comment --><i></i>
<div style="aa">hello</div></font><img src="spacer.gif">
<div style="bb"><img src="spacer.gif"></div>

em um arquivo (por exemplo, params ). Isso permite chamar sua função em combinação com o comando cat , que gera o conteúdo de um arquivo:

$ ./a.out "$(cat params)"

Observe que $() é usado para executar o comando cat params e as cotações duplas são usadas para incluir a totalidade do arquivo como o parâmetro para a.out . Com a combinação dos dois, podemos passar o conteúdo do arquivo para os parâmetros do seu programa.

    
por 24.02.2018 / 02:23
11

Se você precisar que o texto HTML seja um parâmetro para o programa, então você precisa citá-lo para protegê-lo do shell (que vê menos de sinais como redirecionamento, entre outras coisas) :

./a.out '<font name="Moronicity" size=12><!-- ignore this comment --><i></i>
<div style="aa">hello</div></font><img src="spacer.gif">
<div style="bb"><img src="spacer.gif"></div>'

Se você precisar que o texto HTML seja enviado para o programa como entrada (stdin), então você pode citá-lo como um documento aqui. Eu indentifiquei ainda mais a primeira linha para indicar que o resto do texto começa na coluna 1:

./a.out << 'EOF'
<font name="Moronicity" size=12><!-- ignore this comment --><i></i>
<div style="aa">hello</div></font><img src="spacer.gif">
<div style="bb"><img src="spacer.gif"></div>
EOF

As aspas simples em torno de EOF impedem a expansão de qualquer parâmetro no texto.

    
por 24.02.2018 / 02:27

Tags