Sto scrivendo uno script bash molto semplice che filtra una determinata directory, ne codifica l'output e quindi divide il file risultante in più file più piccoli poiché i supporti di backup non supportano file enormi.Variabili come comandi negli script di bash
Non ho molta esperienza con bash scripting. Credo di avere problemi nel quotare correttamente le mie variabili per consentire spazi nei parametri. Lo script segue:
#! /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"
esecuzione di questo comando non riesce con:
divisa: "foo/2009-04-27T14-32-04.backup" AA: No such file or directory
Posso risolvere il problema rimuovendo le virgolette intorno a $BACKUP_FILE
dove ho impostato $SPLIT_CMD
. Ma, se ho uno spazio nel nome della mia directory di backup, non funziona. Inoltre, se copio e incollo l'output dal comando "echo" direttamente nel terminale funziona correttamente. Chiaramente c'è qualcosa che non capisco su come Bash stia sfuggendo alle cose.
Perché si incorporare $ BACKUP_FILE in SPLIT_CMD quando si poteva appena messo dopo $ SPLIT_CMD in t lui oleodotto? –
Beh, potrei farlo, ma a quel punto non c'è davvero molto senso nell'avere variabili per contenere i miei comandi e potrei anche espanderlo come nella risposta di Juliano in basso. – wxs
http://mywiki.wooledge.org/BashFAQ/050 – tripleee