swa*_*wam 2 shell bash shell-script stdin
我有一个脚本可以输出各种信息和 html 表单的文本字段(方法 POST)。当我尝试 cat <&0 时,它显示正确。然而几行之后,我再次尝试 cat <&0 并且没有打印任何内容。我究竟做错了什么?
....
cat <&0
echo Content length is $CONTENT_LENGTH
cat <&0 | sed -e 's/&/\n/g' | cut -d'=' -f2
....
Run Code Online (Sandbox Code Playgroud)
你没有做错任何事:这是我们应该期待的。
第一个cat <&0
消耗标准输入的全部内容,因为这就是cat
它的作用:它读取所有输入直到结束。
当第二次cat <&0
运行时,标准输入上没有任何东西可以消耗:之前已经到达文件末尾。
如果在 shell 脚本中,您需要通过标准输入进行 2 次或多次传递,则必须将其转储到临时文件中,然后根据需要多次处理临时文件。
安全地在其中创建临时文件/tmp
并确保它们在您的脚本终止或死亡时被正确处理留给您作为练习:-)
顺便说一下,这<&0
是不必要的,什么也不做。它的功能是将标准输入指向文件描述符 0...这是标准输入...根据定义,标准输入已经指向!您可以cat
单独执行该命令。
如果你想从标准输入读取两次,你需要以某种方式缓冲它(很可能,在一个临时文件中)。第一个cat
可以被一个调用替换,该调用tee
也将数据写入文件,第二个调用可以重新读取该文件cat
(这也不是必需的;sed
可以直接从文件中读取)。
tee > input_buffer # Copy standard input to a file and standard output
echo Content length is $CONTENT_LENGTH
sed -e 's/&/\n/g' input_buffer | cut -d = -f2
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
3311 次 |
最近记录: |