Estou tentando escrever um gancho pós-confirmação para o SVN, hospedado em nosso servidor de desenvolvimento. Meu objetivo é tentar fazer check-out automático de uma cópia do projeto confirmado no diretório em que ele está hospedado no servidor. No entanto, preciso poder ler apenas o último diretório da cadeia de diretório passada para o script para fazer checkout no mesmo subdiretório em que nossos projetos estão hospedados.
Por exemplo, se eu fizer um SVN confirmar o projeto "exemplo", meu script obterá "/ usr / local / svn / repos / example" como seu primeiro argumento. Eu preciso tirar apenas "exemplo" do final da string e concatená-la com outra string para que eu possa fazer checkout em "/ server / root / example" e ver as alterações ao vivo imediatamente.
SUBDIR="/path/to/whatever/$(basename $1)"
$1
, ou$1
está vazioA abordagem a seguir pode ser usada para obter qualquer caminho de um nome de caminho:
Resultado:
fonte
echo "$(basename "$(dirname "$pathname")")"
O Bash pode obter a última parte de um caminho sem precisar chamar o externo
basename
:fonte
d=/home/me/somefolder;subdir="/$d/${1##*/}"
Acabei com algo como//home/me/somefolder//
o $ d, na verdade, vem de um loop.for d in $(find $SOMEFOLDER -maxdepth 1 -type d);
Usandosubdir=$(basename $d)
funciona como esperado.while
vez defor
iterar sobre a saída defind
(find -print0 | xargs -0
é melhor) ou usar globbing:for d in $SOMEFOLDER/*/
(a barra final funciona como-type d
- você pode usar**
no Bash 4 para recursão, se quisershopt -s globstar
, mas a mensagem "Lista de argumentos muito longa" é possível). Observe que a${1}
parte do comando representa o primeiro argumento de um script ou função. Você pode precisar usar${d##*/}
alguma outra variável ou especificação de argumento ou certificar-se de que um argumento esteja sendo passado$1
$1
contémthe path from which last component is to be taken out
. Eu perdi essa parte. Meu caso de uso:target_path='/home/user/dir1/dir2/dir3/'; target_path="${target_path%/}"; last_component=${target_path##*/}; echo $last_component
- Works 😉${1##*/}
funciona: unix.stackexchange.com/a/171786/15070