dir=$(basename [email protected]:acc/toolkit.git .git)
definirá $dir
para toolkit
.
também é útil no comando dirname
.
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?
dir=$(basename [email protected]:acc/toolkit.git .git)
definirá $dir
para toolkit
.
também é útil no comando dirname
.
Você precisa prosseguir em duas etapas:
[email protected]:acc/toolkit.git
dir=${dir#*/} # Remove everything up to /
dir=${dir%.*} # Remove everything from the .
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
# ...