栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Pipe Bash命令输出到stdout和变量

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Pipe Bash命令输出到stdout和变量

复制到TTY(不是标准输出!)

管道组件在子外壳程序中运行,因此,即使它们确实分配了外壳程序变量(并且语法不正确),这些外壳程序变量也会在管道退出时立即取消设置(因为子外壳程序的寿命与管道程序一样长)。

因此,您需要将 整个管道 的输出捕获到变量中:

var=$(find "$filename" -perm "$i" | tee /dev/tty | wc -l)

就个人而言,顺便说一句,我是

tee
荷兰国际集团,以
/dev/stderr
/dev/fd/2
避免决策行为依赖于TTY是否可用。


实际管道到标准输出

使用bash 4.1,自动文件描述符分配使您可以执行以下操作:

exec {stdout_copy}>&1 # make the FD named in "$stdout_copy" a copy of FD 1# tee over to "/dev/fd/$stdout_copy"var=$(find "$filename" -perm "$i" | tee /dev/fd/"$stdout_copy" | wc -l)exec {stdout_copy}>&- # close that copy previously createdecho "Captured value of var: $var"

对于较旧版本的bash,您需要自己分配FD-在以下示例中,我选择文件描述符编号3(因为0、1和2分别保留给stdin,stdout和stderr):

exec 3>&1  # make copy of stdout# tee to that copy with FD 1 going to wc in the pipevar=$(find "$filename" -perm "$i" | tee /dev/fd/3 | wc -l)exec 3>&-  # close copy of stdout


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/403318.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号