2014-05-12 5 views
1

J'ai ce problème avec un script bash simple pour créer un fichier, puis connectez-vous à la sortie de rsync.créer un fichier à travers une variable dans bash

Cependant, cela ne fonctionne pas Je continue d'obtenir "commande non trouvée", ne crée pas le fichier et ne se connecte pas à elle. Je reçois l'erreur "/ var/log /" est un répertoire.

#!/bin/bash 
FILENAME=ram_sys4-$(date +%Y_%m_%d_%H:%M).log 
touch /var/log/$(FILENAME) 
date >> /var/log/$(FILENAME) 
rsync -r -L -H -g -o -p -t -a --delete --verbose --log-format="%t %i %l %f %M %h %o \n" --log-file=/var/log/$(FILENAME) /root/Desktop/R/ /root/Desktop/W/ 
date >> /var/log/$(FILENAME) 
+3

Au lieu de '$ (FILENAME)' utiliser '$ { FILENAME} ' – Ashkan

+0

Veuillez ne pas répondre aux questions avec un commentaire. – chepner

Répondre

1

La syntaxe $(VAR_NAME) est utilisée dans Makefiles, mais pas dans bash. En bash, utilisez

${VAR_NAME} 

ou encore plus simple

$VAR_NAME 
+0

Si mon nom de fichier a une date + heure et minute, la prochaine fois que le script appelle le nom de fichier, par exemple lors de la commande .tar, va-t-il taper le même fichier ou tenter d'en taper un nouveau? Parce que, l'heure ou la minute a probablement changé depuis le début de la tâche rsync – oj43085

1
#!/bin/bash 
FILENAME=ram_sys4-$(date +%Y_%m_%d_%H:%M).log 
touch /var/log/${FILENAME} 
date >> /var/log/${FILENAME} 
rsync -r -L -H -g -o -p -t -a --delete --verbose --log-format="%t %i %l %f %M %h %o \n" --log-file=/var/log/${FILENAME} /root/Desktop/R/ /root/Desktop/W/ 
date >> /var/log/${FILENAME} 

$(FILENAME) est Command Substitution ce que vous essayez faire pour est Parameter Expansion

Questions connexes