加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

bash – pipe创建一个子shell

发布时间:2020-12-15 22:15:40 所属栏目:安全 来源:网络整理
导读:所以这个读取是在管道之后执行的,这意味着echo的输出被读入str – 但由于它是在管道之后,因此str的内容现在位于父 shell无法读取的子 shell中. 我的问题是 – str的内容会发生什么?管道是否创建子shell,然后一旦内容被读入str,父进程是否会终止子进程并删除
所以这个读取是在管道之后执行的,这意味着echo的输出被读入str – 但由于它是在管道之后,因此str的内容现在位于父 shell无法读取的子 shell中.
我的问题是 – str的内容会发生什么?管道是否创建子shell,然后一旦内容被读入str,父进程是否会终止子进程并删除str – 或者str的内容是否存在于shell之外的某个位置.就像我们如何看待子壳中的内容一样?我们可以从父shell访问子shell吗?

echo hello | read str
echo $str

解决方法

在您的示例中,$str存在于子shell中,默认情况下,一旦该行完成,它就会消失.子进程无法修改其父进程.

除了更改shell选项lastpipe之外,您还可以更改代码以避免使用管道.在这种情况下,您可以使用:

read str < <(your command) 
# or
str=$(your command)

这两个都创建了子shell,但是在父进程中分配了$str.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读