如何在 shell 脚本中正确设置 pv 大小
How to correctly set pv size in shell script
我正在编写备份脚本,希望看到 tar 的正确进度。
脚本主要部分:
backup_file="root-backup-$(date +%Y.%m.%d-%H.%M.%S).tar"
sudo -v
sudo mount /dev/vg/root /mnt
time sudo sh -c "cd /mnt; tar --xattrs -cf - . | pv -s $(du -sb | grep -o '[0-9]*') > /backup/${backup_file}"
但是 pv 显示快速填充进度条,然后数字增加到 100000%。
Upd1. 修复了脚本中的印刷错误。确实可以,但是进度条不对
我发现了问题:$(du -sb | grep -o '[0-9]*')
不是在新的子 shell 下调用 - 它是作为命令替换调用。
因此,在 运行 sudo sh -c
bash 调用 $(du -sb | grep -o '[0-9]*')
之前,在某个当前目录(在我的情况下该目录较小)并将结果替换为字符串。
因此 pv -s
大小不正确并且显示的进度不正确。
我决定防止替换 用单引号包围符号 $
:
time sudo sh -c "cd /mnt; tar --xattrs -cf - . | pv -s "'$'"(du -sb | grep -o '[0-9]*') > /backup/${backup_file}"
我正在编写备份脚本,希望看到 tar 的正确进度。 脚本主要部分:
backup_file="root-backup-$(date +%Y.%m.%d-%H.%M.%S).tar"
sudo -v
sudo mount /dev/vg/root /mnt
time sudo sh -c "cd /mnt; tar --xattrs -cf - . | pv -s $(du -sb | grep -o '[0-9]*') > /backup/${backup_file}"
但是 pv 显示快速填充进度条,然后数字增加到 100000%。
Upd1. 修复了脚本中的印刷错误。确实可以,但是进度条不对
我发现了问题:$(du -sb | grep -o '[0-9]*')
不是在新的子 shell 下调用 - 它是作为命令替换调用。
因此,在 运行 sudo sh -c
bash 调用 $(du -sb | grep -o '[0-9]*')
之前,在某个当前目录(在我的情况下该目录较小)并将结果替换为字符串。
因此 pv -s
大小不正确并且显示的进度不正确。
我决定防止替换 用单引号包围符号 $
:
time sudo sh -c "cd /mnt; tar --xattrs -cf - . | pv -s "'$'"(du -sb | grep -o '[0-9]*') > /backup/${backup_file}"