Bash 你给我的条形码告诉我一个关于没有PID的错误

Bash 你给我的条形码告诉我一个关于没有PID的错误,bash,progress-bar,Bash,Progress Bar,我是Linux的初学者,也是bash脚本的优秀初学者。我正在尝试编写一个bash脚本,它将备份我的主目录并向我显示进度。我发现了一个名为bar的脚本,它允许我在解压缩tar.bz2文件时显示进度条,但在创建一个文件时不显示进度条。我找到了您的代码并正在尝试,但它给了我一个错误: lsof:未指定进程ID lsof 4.81 我从本页查看您的代码: 代码如下: #! /bin/bash tar -jcf userhomeBU$(date +%Y&m&d)".tar.bz2" /home/user

我是Linux的初学者,也是bash脚本的优秀初学者。我正在尝试编写一个bash脚本,它将备份我的主目录并向我显示进度。我发现了一个名为bar的脚本,它允许我在解压缩tar.bz2文件时显示进度条,但在创建一个文件时不显示进度条。我找到了您的代码并正在尝试,但它给了我一个错误: lsof:未指定进程ID lsof 4.81

我从本页查看您的代码: 代码如下:

#! /bin/bash tar -jcf userhomeBU$(date +%Y&m&d)".tar.bz2" /home/user lsof -o0 -o -p $PID | awk ' BEGIN { CONVFMT = "%.2f" } $4 ~ /^[0-9]+r$/ && $7 ~ /^0t/ { offset = substr($7, 3) fname = $9 "stat -f %z '\''" fname "'\''" | getline len = $0 print fname, offset / len * 100 "%" } ' #! /bin/bash tar-jcf userhomeBU$(日期+%Y&m&d)“.tar.bz2”/home/user lsof-o0-o-p$PID| awk' 开始{CONVFMT=“%.2f”} $4~/^[0-9]+r$/&&7~/^0吨/{ 偏移量=substr($7,3) fname=9美元 “stat-f%z'\'''fname'\'''''''\''getline” 蓝=0美元 打印fname,偏移量/长度*100“ } ' 我的主目录备份得很好,但是由于错误,我没有得到任何进度条

看起来这将使用PID来观察何时完成。我认为它使用的是PID,而不是文件名,因为在脚本的一开始就不知道文件名。你能解释一下这个脚本到底在做什么,为什么我没有得到一个PID让它观看。我把我的备份代码放在前面和后面,但它没有显示一个条,我只是在不同的时间得到相同的错误


救命啊

这里是对你原来帖子中的另一个答案的改编。我测试了它,它在我的机器上运行:

tar -Ocf - /home/user | pv -i 1 -w 50 -berps `du -bs /home/user | awk '{print $1}'` | bzip2 - >  userhomeBU$(date +%Y%m%d)".tar.bz2"

尝试将整个tar命令分配给一个变量,并将该变量传递给pidof:

...
TAR_CMD='tar -jcf userhomeBU$(date +%Y&m&d)".tar.bz2" /home/user'  
lsof -o0 -o -p `pidof -s $TAR_CMD` | \   
awk ...

这不是一个很大的家庭目录,但我有几个大文件在里面。由于有几个iso,备份大约需要45秒,而且它位于虚拟机中。另外,我知道它不起作用,因为没有创建备份文件。脚本中没有&。当我运行它时,我得到以下输出:[1]stopped tar-Ocf-/home/user | pv-i1-w50-berps'du-bs/home/user | awk'{print$1}'”| bzip2->userBU(date+%Y%m%d)“.tar.bz2” [1] stopped tar -Ocf - /home/user | pv -i 1 -w 50 -berps 'du -bs /home/user | awk '{print $1}'' | bzip2 - > userBU(date +%Y%m%d)".tar.bz2"
这只是我代码的副本。[]中的数字随着每次运行而增加一。代码中的第一个“和最后一个”实际上是tilda下的“单个”,但“没有出现在本文中。

这假设只有一个
tar
过程。如果还有其他变量,
pidof
将返回两个PID。如果我将tar cmd分配给一个var,如何调用带有var的cmd使其实际运行cmd?这没有显示任何进度。不确定我做错了什么。更改了答案以使用不同的方法。此外,我必须使用
%m%d
而不是
&m&d
来执行日期命令。我有“并且应该有”。它只是说[2]停止了“大长指令”有什么想法吗?每次我运行它,[]中的数字都会增加1,但仍然说停止了。