如何将(复制)命令与(进度条)脚本一起使用

如何将(复制)命令与(进度条)脚本一起使用

问题

我必须输入什么才能让该脚本工作并在处理文件时显示进度条 ( BBC.pdf)。问题更多的是关于使用脚本运行命令,而不是在应对时显示进度条。

进度条脚本

#!/bin/sh
cp_p()
{
   strace -q -ewrite cp -- "${1}" "${2}" 2>&1 \
      | awk '{
        count += $NF
            if (count % 10 == 0) {
               percent = count / total_size * 100
               printf "%3d%% [", percent
               for (i=0;i<=percent;i++)
                  printf "="
               printf ">"
               for (i=percent;i<100;i++)
                  printf " "
               printf "]\r"
            }
         }
         END { print "" }' total_size=$(stat -c '%s' "${1}") count=0
}

我尝试过的

sudo ./cpp.sh /home/user1/Downloads/BBC.pdf /home/user1/

sudo cp ./cpp.sh /home/user1/Downloads/BBC.pdf /home/user1/

cpp.sh是脚本中的~/scripts目录

答案1

您的脚本定义了一个名为 的函数cp_p,但不执行它。去掉函数定义,直接使用代码。

#!/bin/sh
strace -q -ewrite cp -- "${1}" "${2}" 2>&1 \
  | awk …

如果要保留函数定义,请在最后运行它。这在这里没有用,但在具有多个函数的较大脚本中可能很有用。

#!/bin/sh
cp_p()
{
}
cp_p "$@"

无论哪种方式,要运行脚本,您只需运行

./cpp.sh /home/user1/Downloads/BBC.pdf /home/user1/

假设该文件cpp.sh位于当前目录中。

#!请注意,在您的帖子中,第一行之前有一个空格。如果这是复制粘贴错误,请解决您的问题。如果脚本中存在空格,请将其删除:#!必须是脚本的前两个字节。

相关内容