【问题标题】:echo and read with pipe issue [duplicate]echo and read with pipe 问题[重复]
【发布时间】:2023-02-04 01:09:07
【问题描述】:

首先,很抱歉,我正在学习 bash,而且我是新手。 请找到以下脚本。

grep "error" /var/log/syslog | echo hi | while read line   
do
    echo $line 
done   

如果我没记错的话,上面的脚本将在 /var/log/syslog 中 grep 关键字“error”,并将其作为 STDIN 发送到 while 循环内,并显示输出。

也请循环下面的脚本。

echo "hello"  | read hi 
echo $hi

所以当我运行这个脚本时,我没有得到任何输出,这是为什么? 我应该使用任何循环吗?只有这样我才会得到输出?

【问题讨论】:

  • If I am not wrong...您运行了第一组代码了吗?它做你想做的事吗?不管……第一组代码有什么问题?
  • 管道命令在单独的子外壳中执行,因此 hi 未在管道外定义。 (寻找合适的副本。)
  • 当 chepner 寻找重复项时,BashFAQ/024 也可能有帮助。
  • 至于第二组代码... read hi 在子进程中执行;当子流程退出时,在该子流程期间设置的所有变量都将丢失(即,它们不会“浮动”到父/调用流程);最终结果是,当echo $hi 运行时,变量hi 未定义

标签: bash


【解决方案1】:

您应该查看|(“管道”)的工作原理。简而言之,它将左侧表达式的标准输出用作右侧表达式的标准输入。考虑表达式的标准输入和输出,以及将它们通过管道连接在一起的意义。

【讨论】:

  • 这没有回答问题。
猜你喜欢
  • 1970-01-01
  • 2017-02-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-21
  • 1970-01-01
  • 2022-11-11
相关资源
最近更新 更多