J'essaie d'écrire un hook post-commit pour SVN, qui est hébergé sur notre serveur de développement. Mon objectif est d'essayer d'extraire automatiquement une copie du projet validé dans le répertoire où il est hébergé sur le serveur. Cependant, je dois pouvoir lire uniquement le dernier répertoire de la chaîne de répertoire transmise au script afin de pouvoir accéder au même sous-répertoire où nos projets sont hébergés.
Par exemple, si je crée un engagement SVN dans le projet "exemple", mon script obtient "/ usr/local/svn/repos/exemple" comme premier argument. Je dois obtenir juste "exemple" à la fin de la chaîne, puis le concaténer avec une autre chaîne afin de pouvoir passer à la commande "/ server/root/exemple" et de voir les modifications en direct immédiatement.
basename
supprime le préfixe de répertoire d'un chemin:
$ basename /usr/local/svn/repos/example
example
$ echo "/server/root/$(basename /usr/local/svn/repos/example)"
/server/root/example
L'approche suivante peut être utilisée pour obtenir n'importe quel chemin d'un nom de chemin:
pathname=a/b/c
echo $(basename $pathname)
echo $(basename $(dirname $pathname))
echo $(basename $(dirname $(dirname $pathname)))
Sortie:
c
b
a
Bash peut obtenir la dernière partie d'un chemin sans avoir à appeler l'externe basename
:
subdir="/path/to/whatever/${1##*/}"