La complétion automatique de Bash ajoute un / à la fin d'un nom de répertoire. Comment puis-je supprimer cela d'un paramètre de position?
#!/bin/sh
target=$1
function backup(){
date=`date "+%y%m%d_%H%M%S"`
PWD=`pwd`
path=$PWD/$target
tar czf /tmp/$date$target.tar.gz $path
}
backup
case $x in *[!/]*/) x=${x%"${x##*[!/]}"};; esac
target=${DIR%/}
Utilisation
target=${1%/}
Voir ceci la substitution de paramètre de ce guide de script bash pour plus.
la source
Je pense qu'une meilleure solution pour canoniser les chemins est
realpath $path
ou avec-m
option si elle n'existe pas. Cette solution supprime automatiquement les barres obliques inutiles et ajoute pwdla source
readlink -f
c'est un peu plus portable querealpath
. Pour des options supplémentaires / alternatives: linux.die.net/man/1/readlinktarget=$(realpath -L --relative-base . $1)
Attention, bash3 a ajouté une expression régulière similaire à Perl à bash. Le guide mentionné couvre cela ainsi que le guide officiel de GNU , mais toutes les références ne le font pas.
Qu'est-ce que j'ai fait?
Remplaçant
2.19/*
pour être2.19
.Solution
la source