标签: stdin

Bash/csh:测试 stdin 的文件结尾 (EOF)

我想要做:

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 下都能工作。

bash eof stdin

5
推荐指数
1
解决办法
1万
查看次数

zip 提取器从标准输入读取档案

如下来自UNZIP(1L)手册页

尚不支持从标准输入读取的档案

是否有其他 CLI 程序在 Linux/cygwin 下运行,可以从 zip 档案中提取并从 stdin 读取它们?

linux zip cygwin command-line stdin

5
推荐指数
1
解决办法
3928
查看次数

Cat 在尝试读取空 STDIN 时挂起

我的脚本尝试收集执行时 STDIN 中可能存在或不存在的信息,但如果管道为空,则 cat 会挂起。如果 STDIN 中没有任何内容,如何确保我的脚本跳过此步骤?

stdin=$(cat <&0)
Run Code Online (Sandbox Code Playgroud)

请注意,我并不是专门寻找任何引用 /dev/ 的解决方案,因为我希望它可以在 chroot 中使用,无论 /dev/ 是否已安装(如果可能)。

linux bash cat stdin

5
推荐指数
1
解决办法
3250
查看次数

在 bash 中为文件的每一行运行命令,将行作为标准输入传递

如何将一些输入逐行传递给命令行(即为每一行调用命令)?

xargs 不起作用,因为它将行作为参数传递,而不是作为标准输入传递。

出现这种情况的具体情况是解码一个文件,其行是 base64 编码的字符串。

linux bash redirection command-line stdin

4
推荐指数
1
解决办法
1141
查看次数

shell 标准流重定向顺序 OR 2&gt;&amp;1 1&gt;/dev/null vs 1&gt;/dev/null 2&gt;&amp;1

有人可以澄清差异吗?其中一些被认为是最佳实践吗?如果我没记错的话,我以某种方式在 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)

bash redirection stderr stdout stdin

4
推荐指数
1
解决办法
3230
查看次数

将命令通过管道传输到 nc

我似乎搜索了许多非常相似的问题,但从未找到有用的东西。我正在尝试使用树莓派(第二代)与 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 并获取这些响应(仍然不知道如何将它们传递到文件),但这几乎没有效率。我觉得应该有一种更简单的方法来做到这一点。我有点菜鸟,但我想我可以在这里尝试一下。任何帮助是极大的赞赏

linux bash cat netcat stdin

4
推荐指数
2
解决办法
1万
查看次数

使用与 stdin 和 stdout 相同的文件会导致空文件

如果要过滤文件,但如果我使用相同的文件作为输入和输出,则输出文件为空。是否有另一种解决方案而不是使用第二个文件?

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)

linux shell command-line stdout stdin

2
推荐指数
1
解决办法
500
查看次数

标签 统计

stdin ×7

bash ×5

linux ×5

command-line ×3

cat ×2

redirection ×2

stdout ×2

cygwin ×1

eof ×1

netcat ×1

shell ×1

stderr ×1

zip ×1