当前位置: 首页 > 面试题库 >

让bash处理来自管道的stdin的数据

岳凯康
2023-03-14
问题内容

我试图让bash处理来自管道的stdin的数据,但是没有运气。我的意思是以下任何一项工作:

echo "hello world" | test=($(< /dev/stdin)); echo test=$test
test=

echo "hello world" | read test; echo test=$test
test=

echo "hello world" | test=`cat`; echo test=$test
test=

我希望输出在哪里test=hello world。我试过用“”引号括住"$test"也不起作用。


问题答案:

采用

IFS= read var << EOF
$(foo)
EOF

可以read像这样欺骗从管道中接受:

echo "hello world" | { read test; echo test=$test; }

甚至编写这样的函数:

read_from_pipe() { read "$@" <&0; }

但是没有意义-您的变量分配可能不会持续!管道可能会产生一个子外壳,其中环境是通过值而不是通过引用继承的。这就是为什么read不打扰管道输入的原因-
它是未定义的。

仅供参考,http://www.etalabs.net/sh_tricks.html是打击bourne贝壳sh的怪异和不兼容所必需的精巧的草皮收藏。



 类似资料:
  • 这是凯文帮助后的代码。

  • 问题 你想以数据管道(类似Unix管道)的方式迭代处理数据。 比如,你有个大量的数据需要处理,但是不能将它们一次性放入内存中。 解决方案 生成器函数是一个实现管道机制的好办法。 为了演示,假定你要处理一个非常大的日志文件目录: foo/ access-log-012007.gz access-log-022007.gz access-log-032007.gz ..

  • null (它也应该与ffprobe和ffplay一起工作)

  • 问题内容: 有谁知道bash如何通过管道发送数据? 此命令是否将file.txt的所有内容打印到缓冲区中,然后由tail读取?还是说,此命令是逐行打印file.txt的内容,然后在每一行停顿以进行尾部处理,然后请求更多数据? 我问的原因是我要在嵌入式设备上编写程序,该程序基本上对某些数据块执行一系列操作,其中一个操作的输出作为下一个操作的输入发出。我想知道linux(bash)是如何处理的,因此请

  • 我有一个Spark RDD,其中每个元素都是形式的元组。我想使用方法将输入传递给外部可执行文件并生成形式的新RDD。我稍后需要键进行关联。 下面是使用火花壳的示例: 提前谢谢。

  • 在应用程序中使用Spring Data JPA时,您通常定义实体(@Entity),编写存储库接口(扩展了CrudRepository),并进行一些超出本问题范围的额外配置。 例如, 现在,如果我有多个像上面这样的实体,并且需要设计一个服务API,比如searchByProductAndUserAndLocation(假设这三个都是数据库表),那么在Spring Data JPA我应该如何做呢?假