如何将长文本放入shell?

Tin*_*ler 2 shell

例如

$ 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>
Run Code Online (Sandbox Code Playgroud)

-bash:意外标记“<”附近的语法错误

会不断收到此错误

Jef*_*ler 11

如果您需要该 HTML 文本作为程序的参数,那么您需要引用它以保护它免受 shell(将小于号视为重定向等):

./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>'
Run Code Online (Sandbox Code Playgroud)

如果您需要将该 HTML 文本作为输入(stdin)发送到程序,则可以将其引用为 here-document。我进一步缩进了第一行,以表明文本的其余部分都从第 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
Run Code Online (Sandbox Code Playgroud)

周围的单引号EOF可防止扩展文本中的任何参数。

  • 另请注意,根据 HTML 文档的长度,在命令行上将其作为操作数可能会导致“参数列表太长”错误,如果它太长。 (3认同)

ali*_*lth 6

您可以在每个特殊字符 ( <, [, >, ])之前使用转义字符,但在这种情况下会非常麻烦。相反,您可以简单地用单引号将整个参数括起来,如下所示:

$ ./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>'
Run Code Online (Sandbox Code Playgroud)

另一种选择是放置参数字符串

<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>
Run Code Online (Sandbox Code Playgroud)

到一个文件中(例如,params)。这允许结合cat命令调用您的函数,该命令输出文件的内容:

$ ./a.out "$(cat params)"
Run Code Online (Sandbox Code Playgroud)

请注意,$()用于执行cat params命令,双引号用于包含整个文件作为 的参数a.out。通过两者的结合,我们可以将文件的内容传递到您的程序的参数中。

  • 仅供参考,还有`./a.out "$(&lt; params)"` 语法。 (3认同)