Estoy escribiendo un script bash muy simple que ataca un directorio determinado, cifra el resultado de eso y luego divide el archivo resultante en varios archivos más pequeños ya que los medios de copia de seguridad no admiten archivos enormes.Variables como comandos en scripts bash
No tengo mucha experiencia con bash scripting. Creo que tengo problemas para citar mis variables correctamente para permitir espacios en los parámetros. El guión sigue:
#! /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"
ejecución de este comando falla con:
dividida: "foo/2009-04-27T14-32-04.backup" AA: No existe el fichero o directorio
Puedo solucionarlo quitando las comillas en $BACKUP_FILE
donde establezco $SPLIT_CMD
. Pero, si tengo un espacio en el nombre de mi directorio de respaldo, no funciona. Además, si copio y pego la salida del comando "echo" directamente en el terminal, funciona bien. Claramente, hay algo que no entiendo acerca de cómo Bash está escapando cosas.
¿por qué se incrusta $ BACKUP_FILE en SPLIT_CMD cuando simplemente podría ponerlo tras $ SPLIT_CMD en t él tubería? –
Bueno, podría hacer eso, pero en ese momento no tiene mucho sentido tener variables para contener mis comandos y también puedo expandirlo todo como en la respuesta de Juliano a continuación. – wxs
http://mywiki.wooledge.org/BashFAQ/050 – tripleee