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