Synchronisez deux dossiers et, en cas de succès, copyz un file d'un location à l'autre

J'utilise la command rsync pour synchroniser deux dossiers et en cas de succès de rysnc je veux copyr un succès de file et pendant la copy append le nom du dossier source comme Success_FolderName.J'utilise $ (basename!: 3) pour get le troisième paramètre à savoir Folder Name .

bash /Sync.sh 10_03_2016

 #! /bin/bash set -o history set -o histexpand /usr/bin/rsync -avh -r /Source/$1 /Destination/ rsyncStatus=$? folderParam=$(basename !:3) if($rsyncStatus==0) then cp /Status/Sucesss /Result/Success_$folderParam else cp /Status/Failure /Result/Failure_$folderParam if 

Sortie

Erreur

 /Sync.sh: line 7: :3: bad word specifier 

Et le file est copié avec 'Success_'

Je ne comprends pas pourquoi tu rends ça aussi complexe. Pourquoi utiliser la fonction d'extension de l'historique !:N (plutôt exiguë !:N ) !:N lorsque vous avez déjà tout ce dont vous avez besoin passé en argument? Par exemple:

 #! /bin/bash source="/Source/$1" destination="Destination/" folderParam="$(basename "$source")" /usr/bin/rsync -avh -r "$source" "$destination" rsyncStatus=$? if($rsyncStatus==0) then cp /Status/Sucesss /Result/Success_"$folderParam" else cp /Status/Failure /Result/Failure_"$folderParam" if 

Ou, encore plus simple:

 #! /bin/bash source="/Source/$1" destination="Destination/" folderParam="$(basename "$source")" if /usr/bin/rsync -avh -r "$source" "$destination"; then cp /Status/Sucesss /Result/Success_"$folderParam" else cp /Status/Failure /Result/Failure_"$folderParam" if 

Ou même:

 #! /bin/bash source="/Source/$1" destination="Destination/" folderParam="$(basename "$source")" touch "/Result/Failure_$folderParam" /usr/bin/rsync -avh -r "$source" "$destination" && mv /Result/Failure_"$folderParam" /Result/Success_"$folderParam" 

La réponse de Terdon est meilleure, mais si vous voulez vraiment utiliser les opérateurs d'historique, vous pouvez spécifier la command à laquelle vous voulez vous référer:

 !rsync:3 

sera remplacé par le troisième paramètre à la dernière invocation rsync . Donc dans votre cas,

 folderParam=$(basename !rsync:3)