(進行状況バー)スクリプトで(コピー)コマンドを使用する方法

(進行状況バー)スクリプトで(コピー)コマンドを使用する方法

質問

このスクリプトが機能してファイルが処理されている間に進行状況バー(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ファイルが現在のディレクトリにあるとします。

#!投稿の最初の行の前にスペースがあることに注意してください。コピー - 貼り付けエラーの場合は、問題を解決してください。スクリプトにスペースが含まれている場合は削除します。#!スクリプトの最初の2バイトでなければなりません。

関連情報