나는 주어진 미디어 디렉토리를 tars하고, 그 결과물을 암호화 한 다음, 백업 미디어가 거대한 파일들을 지원하지 않기 때문에 결과 파일을 다수의 작은 파일들로 나눠주는 아주 간단한 bash 스크립트를 작성하고있다.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 그는 파이프 라인? –
그럼 내가 할 수는 있지만, 그 시점에서 내 명령을 포함 할 변수가있는 것이별로 중요하지 않으며 아래의 줄리아노의 대답처럼 모든 것을 확장 할 수 있습니다. – wxs
http://mywiki.wooledge.org/BashFAQ/050 – tripleee