如何在解析内容以显示反馈的同时隐藏脚本的输出?

Posted

技术标签:

【中文标题】如何在解析内容以显示反馈的同时隐藏脚本的输出?【英文标题】:How do I hide my script's output while also parsing content to display feedback? 【发布时间】:2020-09-01 03:57:38 【问题描述】:

我有以下 bash 脚本,它扩展了输出大量信息的卷。

我想隐藏脚本命令的所有输出,仅在脚本开始时捕获卷的大小,然后在脚本结尾处,并输出带有更改的单行。

脚本:

#!/bin/bash

du -h
printf "Fix\nFix\n" |parted ---pretend-input-tty /dev/sda print
parted /dev/sda resizepart 3 100%
pvresize /dev/sda3
lvextend -l +100%FREE /dev/SystemVG/root
xfs_growfs /dev/SystemVG/root
du -h

开头的du -h命令输出如下:

Filesystem Size Used Avail Use% Mounted on
/dev/mapper/SystemVG-root 12G 6.4G 5.4G 55% /
devtmpfs 858M 0 858M 0% /dev
tmpfs 870M 0 870M 0% /dev/shm
tmpfs 870M 9.4M 860M 2% /run
tmpfs 870M 0 870M 0% /sys/fs/cgroup
/dev/sda2 1.9G 49M 1.8G 3% /boot
/dev/sda1 71M 12M 60M 16% /boot/efi
tmpfs 174M 0 174M 0% /run/user/0

最后的du -h命令输出如下:

Filesystem Size Used Avail Use% Mounted on
/dev/mapper/SystemVG-root 21G 6.4G 14G 32% /
devtmpfs 858M 0 858M 0% /dev
tmpfs 870M 0 870M 0% /dev/shm
tmpfs 870M 9.4M 860M 2% /run
tmpfs 870M 0 870M 0% /sys/fs/cgroup
/dev/sda2 1.9G 49M 1.8G 3% /boot
/dev/sda1 71M 12M 60M 16% /boot/efi
tmpfs 174M 0 174M 0% /run/user/0

我想要实现的输出如下:

[root@system]# ./expandvolume.sh
Volume has been expanded from 12G to 21G.
[root@system]#

【问题讨论】:

如果您不想看到它的输出,为什么要运行du -h 因为我想捕获它的输出。 然后将输出重定向到一个文件,之后您可以在以后需要时对其进行处理。 【参考方案1】:

如果您可以提供文件系统名称,您可以像这样处理du 输出:

filesystem='SystemVG'
start_du=$(du -h | grep "$filesystem" | awk 'print $2')

...

end_du=$(du -h | grep "$filesystem" | awk 'print $2')
echo "Volume has been expanded from $start_du to $end_du"

扩展卷的中间步骤只需要将 stdout 和/或 stderr 转移到 /dev/null 以抑制输出,例如pvresize /dev/sda3 >/dev/null 2>&1 转移两者(离开2>&1 仍然会报告错误)。

【讨论】:

有没有办法将标准错误转移到一个变量并使用某种分支逻辑:如果错误回显“错误扩展卷”,则回显“卷扩展”? 嗯,是的,但是当遇到错误时中止(整个脚本)可能更有意义(这样您就永远不会收到成功消息)。这里有一些关于错误处理的内容可能会给你一些想法:linuxhint.com/bash_error_handling。毫无疑问,其他人会带来一些详细的东西。 命令 || echo "你踩到了地雷!" 1>&2 false 似乎是我想要的,只是不确定如何将它与多个命令一起使用。 在这里找到我的答案:***.com/questions/22009364/… 这是我最终得到的脚本:pastebin.com/wQKYJ5Dr

以上是关于如何在解析内容以显示反馈的同时隐藏脚本的输出?的主要内容,如果未能解决你的问题,请参考以下文章

如何在Google表格中正确显示“显示和隐藏行”脚本功能

确保浏览器一次显示所有内容

如何隐藏子进程的输出并继续执行脚本?

在linux,怎么 查看当前目录下的内容,把查看内容保存到aaa.txt,同时显示输出

如何创建 XML 解析器?

如何在 Django 表单中设置密码显示/隐藏眼睛按钮