Estoy tratando de escribir un enlace post-commit para SVN, que está alojado en nuestro servidor de desarrollo. Mi objetivo es tratar de retirar automáticamente una copia del proyecto comprometido en el directorio donde está alojado en el servidor. Sin embargo, necesito poder leer solo el último directorio en la cadena de directorio pasado al script para poder pagar en el mismo subdirectorio donde están alojados nuestros proyectos.
Por ejemplo, si hago una confirmación SVN al proyecto "ejemplo", mi script obtiene "/ usr / local / svn / repos / example" como primer argumento. Necesito obtener solo "ejemplo" del final de la cadena y luego concatenarlo con otra cadena para poder pasar a "/ server / root / example" y ver los cambios en vivo de inmediato.
SUBDIR="/path/to/whatever/$(basename $1)"
$1
, o$1
está vacíoEl siguiente enfoque se puede utilizar para obtener cualquier ruta de un nombre de ruta:
Salida:
fuente
echo "$(basename "$(dirname "$pathname")")"
Bash puede obtener la última parte de una ruta sin tener que llamar al externo
basename
:fuente
d=/home/me/somefolder;subdir="/$d/${1##*/}"
Terminé con algo como//home/me/somefolder//
$ d en realidad proviene de un bucle. Elfor d in $(find $SOMEFOLDER -maxdepth 1 -type d);
usosubdir=$(basename $d)
funciona como se esperaba.while
lugar defor
iterar sobre la salida defind
(find -print0 | xargs -0
es mejor) o usar globbing:for d in $SOMEFOLDER/*/
(la barra final funciona como-type d
: puede usar**
en Bash 4 para la recursión si lo haceshopt -s globstar
, pero un mensaje de "Lista de argumentos demasiado largo" es posible). Tenga en cuenta que la${1}
parte del comando representa el primer argumento de un script o función. Es posible que necesite usar${d##*/}
o alguna otra especificación de variable o argumento o asegurarse de que se pasa un argumento$1
$1
contienethe path from which last component is to be taken out
. Me perdí esa parte. Mi caso de uso:target_path='/home/user/dir1/dir2/dir3/'; target_path="${target_path%/}"; last_component=${target_path##*/}; echo $last_component
- Funciona 😉${1##*/}
funciona: unix.stackexchange.com/a/171786/15070