如何在shell脚本中正确设置pv大小

时间:2016-08-22 08:17:22

标签: shell pipe size

我正在编写备份脚本,希望看到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。脚本中修复的错误。实际上它有效,但进度条不正确。

1 个答案:

答案 0 :(得分:0)

我发现了问题:$(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}"