首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么回显打印不输出$(grep ./proc/net/粘接/债券0)?

为什么回显打印不输出$(grep ./proc/net/粘接/债券0)?
EN

Stack Overflow用户
提问于 2022-06-15 12:19:48
回答 2查看 86关注 0票数 0

当我直接运行一个grep管道时,我得到了两行输出:

代码语言:javascript
复制
$ grep Interface /proc/net/bonding/bond0 | cut -d : -f 2 | sed 's/ //g'
eno1np0
eno2np1
$

奇怪的是,当我捕获并调用echo时,输出是空的。

代码语言:javascript
复制
$ echo $(grep Interface /proc/net/bonding/bond0 | cut -d : -f 2 | sed 's/ //g')
              
$

grep输出的for循环显示了许多空行:

代码语言:javascript
复制
$ for a in $(grep Interface /proc/net/bonding/bond0 | cut -d : -f 2 | sed 's/ //g'); do echo $a; done
 
 
 
 
 
 
 
 
 
 
 
 
 
 
$

不管它的价值是什么,我尝试过将stderr重定向到stdout,而没有运气:

代码语言:javascript
复制
echo $(grep Interface /proc/net/bonding/bond0 2>&1 | cut -d : -f 2 | sed 's/ //g')

我甚至尝试使用cat而不是grep

如何让echo实际打印grep命令输出的内容?通常情况下,echo工作。对于其他事情,我可以像往常一样回显输出。我可以将文本回显到文件中。我只是无法让它与这个grep管道一起工作。

EN

回答 2

Stack Overflow用户

发布于 2022-06-15 12:46:07

我的预感是,来自/proc/net的结果实际上包含空字节,这会抛出shell。

您正在尝试的与臭名昭著的useless use of echo非常相似,尽管我认为如果目标是将所有输出都放在一行上,它并不完全无用(但是仍然是坏的,因为shell将扩展结果中的任何通配符)。

也许可以试试这个:

代码语言:javascript
复制
grep Interface /proc/net/bonding/bond0 |
tr '\000' '\012' |
sed 's/^[^:]*://;s/ //g;N;s/^[^:]*://;s/ //g;s/\n/ /'

尽管s/\n/ /可能不是所有sed变体都可移植的。

票数 3
EN

Stack Overflow用户

发布于 2022-06-15 13:58:37

根据“CharlesDuffy和@tripleee”以及我的一位同事的信息,我们发现了这一点。

我不确定这是一个常见的事件,但张贴在这里,以防其他人在未来遇到这种情况。

原因是环境变量IFS被设置为非标准字符。虽然catgrep工作正常--大概是因为两者都不依赖于IFS才能工作-- echo却没有。

我不完全确定这是如何发生的,但对于面临此问题的任何人,请检查您的环境中是否有一个名为IFS (env | grep IFS)的变量,并将其设置为默认(' \t\n')。

PS:一个周中早晨/facepalm的糟糕开端

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72631290

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档