La finalización automática de Bash agrega un / al final del nombre de un directorio. ¿Cómo puedo quitar esto de un parámetro posicional?
#!/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%/}
Utilizar
target=${1%/}
Vea esto la sustitución de parámetros de esta guía de secuencias de comandos bash para obtener más información.
fuente
Creo que la mejor solución para canonizar rutas es
realpath $path
o con-m
opción si no existe. Esta solución elimina automáticamente las barras innecesarias y agrega pwdfuente
readlink -f
es un poco más portátil querealpath
. Para opciones adicionales / alternativas: linux.die.net/man/1/readlinktarget=$(realpath -L --relative-base . $1)
Tenga cuidado, bash3 agregó expresiones regulares similares a perl a bash. La guía mencionada cubre esto, así como la guía oficial de GNU , pero no todas las referencias lo hacen.
Que hice
Sustituir
2.19/*
a ser2.19
.Solución
fuente