【发布时间】: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