Eu sugiro que você simplifique a construção e dê à próxima pessoa que estiver lendo o código a chance de ver o que está acontecendo. Seu principal problema é que você parece estar confundindo sua execução indireta $( ... )
com [ ... ]
como um operador de teste. Desculpas se eu entendi mal o fluxo, mas acho que isso é o que você pretende:
# Count files on the remote system and confirm that there is at least one
DATE7=$(date -v -7d '+%Y%m%d')
NFILES=$(ssh [email protected] "ls -d '/snapshots/$DATE7'* 2> /dev/null | wc -l")
# If the ssh worked and we have found files then archive them
if [ $? -eq 0 && 0 -lt $NFILES ]
then
# Archive the files
ssh [email protected] "
tar -czf '$ARCHIVES_DIR/$YESTERDAY.tar.gz' '$SNAPSHOT_DIR/$YESTERDAY'* &&
rm -rf '$SNAPSHOT_DIR/$YESTERDAY'
"
fi
Isso supõe que ARCHIVES_DIR
, SNAPSHOT_DIR
e YESTERDAY
estão definidos localmente em outro lugar no seu script.
Lembre-se de que "..."
interpola os valores das variáveis imediatamente, enquanto '...'
tratará o texto como $WIDGET
como uma cadeia de sete caracteres literais começando com um símbolo de dólar. Isso é importante observar, já que tenho seqüências como " '...' "
e ' "..." '
neste código.