我想要做:
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 下都能工作。
如下来自UNZIP(1L)手册页
尚不支持从标准输入读取的档案
是否有其他 CLI 程序在 Linux/cygwin 下运行,可以从 zip 档案中提取并从 stdin 读取它们?
我的脚本尝试收集执行时 STDIN 中可能存在或不存在的信息,但如果管道为空,则 cat 会挂起。如果 STDIN 中没有任何内容,如何确保我的脚本跳过此步骤?
stdin=$(cat <&0)
Run Code Online (Sandbox Code Playgroud)
请注意,我并不是专门寻找任何引用 /dev/ 的解决方案,因为我希望它可以在 chroot 中使用,无论 /dev/ 是否已安装(如果可能)。
如何将一些输入逐行传递给命令行(即为每一行调用命令)?
xargs 不起作用,因为它将行作为参数传递,而不是作为标准输入传递。
出现这种情况的具体情况是解码一个文件,其行是 base64 编码的字符串。
有人可以澄清差异吗?其中一些被认为是最佳实践吗?如果我没记错的话,我以某种方式在 SO 上读到这1>/dev/null应该在此之前:2>&1
ls -al /doesNotExists 2>&1 1>/dev/null
ls -al /doesNotExists 1>/dev/null 2>&1
ls -al /doesNotExists 1>&2 2>/dev/null
ls -al /doesNotExists 2>/dev/null 1>&2
ls -la /doesNotExists 2<&1 1>/dev/null
ls -la /doesNotExists 2<&1 2>/dev/null
ls -la /doesNotExists 1<&2 1>/dev/null
ls -la /doesNotExists 1<&2 2>/dev/null
ls -la /doesNotExists 1>/dev/null 2<&1
ls -la /doesNotExists 2>/dev/null 2<&1
ls -la /doesNotExists 1>/dev/null 1<&2
ls -la /doesNotExists 2>/dev/null 1<&2
Run Code Online (Sandbox Code Playgroud) 我似乎搜索了许多非常相似的问题,但从未找到有用的东西。我正在尝试使用树莓派(第二代)与 Wifi OBDII 传感器进行通信。我可以使用以下命令
nc -C 192.168.0.10 35000
Run Code Online (Sandbox Code Playgroud)
192.168.0.10 是汽车传感器,35000 是端口。这并不重要,因为连接似乎没问题。无论如何,我可以打开一个 nc 实例,然后键入,例如“0145”(传感器代码),作为回报,我在 nc 会话的输出上得到该传感器的值(例如,我的引擎的 RPM) )。效果很好。我想做的是将命令从文本文件传输到 nc 会话中以进行绘图。因此,我的理想结果是将 RPM 值和相关时间的恒定流转储到文本文件中。我可以从那里工作。但是,我并不完全知道该怎么做。我已经设置了一个commands.txt,其中有数千行“0145”,我想读取该文件并将其逐行传递给nc(我可能可以通过睡眠来控制采样间隔),然后读取输出并将其存储到文本文件中。我知道这个问题与标准输入和标准输出以及管道有关,但无论出于何种原因,我一直无法完全理解它。我绝不是其中任何一个的大师。我还想编写整个过程的脚本。
现在,如果我跑
cat <(echo 0145) - | nc -C 192.168.0.10 35000
Run Code Online (Sandbox Code Playgroud)
这为我提供了我想要的终端输出,但仅适用于单个值。但是,一旦我尝试将其放入循环中,将 0145 放入脚本中的 $commands 中,并从 txt 文件中逐行获取 $commands ,它就停止工作。事实上,即使我将其保留为 0145 并且不使用变量,它也会在任何循环或 if 块内停止工作。
所以,长话短说,我想编写脚本将 txt 文件逐行发送到 nc 连接,然后我想将每个响应提取到另一个文件中。如果它是无脚本的,我可以打开该 nc 连接并每 1 秒发送 0145 并获取这些响应(仍然不知道如何将它们传递到文件),但这几乎没有效率。我觉得应该有一种更简单的方法来做到这一点。我有点菜鸟,但我想我可以在这里尝试一下。任何帮助是极大的赞赏
如果要过滤文件,但如果我使用相同的文件作为输入和输出,则输出文件为空。是否有另一种解决方案而不是使用第二个文件?
php -r "echo preg_replace('~/\* DEV \*/(.*)/\* ENDDEV \*/~si', '', file_get_contents('php://stdin'));" < build/index.php > build/index.php
Run Code Online (Sandbox Code Playgroud)