bash script selecionando a última variável de caminho

2

Estou escrevendo meu primeiro script bash. Estou fazendo com que ele instale todos os repositórios que eu tenho no GitHub.

warpInLocations=("[email protected]:acc/toolkit.git" "[email protected]:acc/sms.git" "[email protected]:acc/boogle.git" "[email protected]:acc/cairo.git")

São eles quando eu os instalo.

echo "warping in toolkit, sms, boogle and cairo"
for repo in "${warpInLocations[@]}"
do
  warpInDir=$(echo ${warpToLocation}${repo} | cut -d'.' -f1)
  if [ -d "$warpToLocation"]; then
    echo "somethings in the way.. $warpInDir all ready exists"
  else
    git clone $repo $warpInDir
  fi

done

Esta linha aqui, eu queria que ele me desse uma pasta chamada toolkit ou sms , então depois do / e antes do . no warp nos locais, mas ele está selecionando git@github . Eu acho, porque é depois do . .

Como posso obtê-lo para selecionar o nome no repositório?

    
por TheLegend 24.05.2013 / 16:49

3 respostas

7
dir=$(basename [email protected]:acc/toolkit.git .git)

definirá $dir para toolkit .

também é útil no comando dirname .

    
por 24.05.2013 / 17:17
7

Você precisa prosseguir em duas etapas:

[email protected]:acc/toolkit.git
dir=${dir#*/}                       # Remove everything up to /
dir=${dir%.*}                       # Remove everything from the .
    
por 24.05.2013 / 16:55
2

no bash, você também pode usar um expressão regular e captura de parênteses

for repo in "${warpInLocations[@]}"; do
    [[ $repo =~ /([^.]+)\. ]] && dir=${BASH_REMATCH[1]}
    warpInDir=${warpToLocation}$dir
    # ...
    
por 24.05.2013 / 20:29