私は非常に単純なbashスクリプトを書いています。このディレクトリは、指定されたディレクトリをtarsし、その出力を暗号化し、バックアップメディアが巨大なファイルをサポートしていないため、複数の小さなファイルに分割します。bashスクリプトのコマンドとしての変数
私はbashスクリプトに関する多くの経験がありません。私はパラメータのスペースを許すために変数を正しく引用することに問題があると考えています。スクリプトは次のとおりです。
このコマンドを実行 がスプリット: "FOO/2009-04-27T14-32-04.backup" AA:そのようなファイルやディレクトリ
#! /bin/bash
# This script tars the given directory, encrypts it, and transfers
# it to the given directory (likely a USB key).
if [ $# -ne 2 ]
then
echo "Usage: `basename $0` DIRECTORY BACKUP_DIRECTORY"
exit 1
fi
DIRECTORY=$1
BACKUP_DIRECTORY=$2
BACKUP_FILE="$BACKUP_DIRECTORY/`date +%Y-%m-%dT%H-%M-%S.backup`"
TAR_CMD="tar cv $DIRECTORY"
SPLIT_CMD="split -b 1024m - \"$BACKUP_FILE\""
ENCRYPT_CMD='openssl des3 -salt'
echo "$TAR_CMD | $ENCRYPT_CMD | $SPLIT_CMD"
$TAR_CMD | $ENCRYPT_CMD | $SPLIT_CMD
say "Done backing up"
で失敗します
$SPLIT_CMD
を設定した$BACKUP_FILE
の引用符を削除して修正できます。しかし、私のバックアップディレクトリの名前にスペースがある場合、それは動作しません。また、 "echo"コマンドの出力をコピーして端末に直接貼り付けるとうまく動作します。明らかに、バッシュが物事をどのようにエスケープしているか分かりません。
は、なぜあなたはあなただけの後にそれを置くことができるときSPLIT_CMDで$ BACKUP_FILEを埋め込みます$ SPLIT_CMD/t彼はパイプライン? –
さて、私はそれをすることができましたが、その時点で私のコマンドを格納する変数を持つことにはあまり意味がありませんし、下のJulianoの答えのようにすべてを展開することもできます。 – wxs
http://mywiki.wooledge.org/BashFAQ/050 – tripleee