使用 Grep 命令执行特定命令会给我一个旧的 Grep 输出

使用 Grep 命令执行特定命令会给我一个旧的 Grep 输出

我需要一些帮助,但无法找到解决方案......

我已经编写了一个脚本来运行 xfs_growfs 并通过管道传输它的输出,以便仅当它发现磁盘大小没有差异时才知道,并在其输出中给我一个“数据大小不变”......

然后现在当我运行该命令并管道 grep 它的输出寻找一个我知道它不在第一个命令输出中的字符串时它总是给我该输出:

xfs_growfs -d /mnt/lun1 | grep "Anything that is not in the first command output..."

data size unchanged, skipping

我已经测试过是否是 xfs_growfs 命令出了问题,但如果我将其输出重定向为 null,则不会显示任何内容,这是预期的行为

xfs_growfs -d /mnt/lun1 > /dev/null 2>&1

我已经测试了 grep 命令...没有异常行为:

cat /etc/fstab | grep "DDD" #

我已经关闭了腻子,认为它可能是我设置的变量,甚至用相同的命令创建了一个新脚本,因为我不知道该做什么了......我现在无法重新启动这个系统,那个输出问题没有造成任何大麻烦,但它确实是资产中的痛点。

你们能给我一些解决此问题的办法吗?

更新:我刚刚发现另一件事......

如果您尝试另一个有效的设备并管道 grep 它的输出,它也会表现得同样。如果我尝试在不存在的设备上运行它,它会给我第一个命令错误:

xfs_growfs -d /mnt/lun2 | grep "Anything that is not in the first command output..."

data size unchanged, skipping

xfs_growfs -d /mnt/lun323 | grep "DOXONO"

xfs_growfs: path resolution failed for /mnt/lun323: No such file or directory

答案1

您得到的输出很可能是xfs_growfs发送到标准错误的输出。管道符号 ( |) 通常只管道标准输出,标准错误仍然发送到终端,grep甚至看不到该data size unchanged, skipping行。

在您重定向输出的行中,您不会得到该行,因为您在那里明确地重定向了标准错误(该2>&1部分执行此操作)。

如果您希望在xfs_growfs命令中忽略标准错误,则必须执行以下操作:

xfs_growfs -d /mnt/lun1 2>/dev/null | grep "Anything that is not in the first command" 

这应该不会给你带来任何输出。

相关内容