我想要做:
if not eof(stdin):
pass stdin to program
else:
do nothing
Run Code Online (Sandbox Code Playgroud)
我有一种感觉,它可以写得相当接近:
if test ! --is-eof - ; then
exec program
Run Code Online (Sandbox Code Playgroud)
我试图解决的问题是program
从标准输入读取,但如果没有输入就会崩溃。我无权访问源代码,program
因此program
无法更改。二进制输入大于内存大小,因此首先将标准输入放入文件的速度慢得令人无法接受。在 bash 中逐行处理所有输入的速度也慢得令人无法接受。
理想情况下,该解决方案应该在 csh 和 bash 下都能工作。
这似乎在 csh 和 bash 中都有效,并且可以很好地处理二进制输入(也可以将 \0 作为第一个字符):
# Set $_FIRST_CHAR_FILE to the name of a temp file.
eval `echo $SHELL | grep -E "/(t)?csh" > /dev/null && echo setenv _FIRST_CHAR_FILE /tmp/$$.first_char_file || echo export _FIRST_CHAR_FILE=/tmp/$$.first_char_file`
dd bs=1 count=1 of=$_FIRST_CHAR_FILE >&/dev/null
test -s "$_FIRST_CHAR_FILE" && ( cat $_FIRST_CHAR_FILE; rm $_FIRST_CHAR_FILE; cat - ) | program
Run Code Online (Sandbox Code Playgroud)
感谢 @glenn-jackman 提出了在将这个和 stdin 的其余部分传递给 之前阅读一点的想法cat
。
归档时间: |
|
查看次数: |
11228 次 |
最近记录: |