Uma resposta StackOverflow com mais de 3,5 mil votos apresenta este recurso para atribuir ao DIR
diretório do script bash atual:
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
Estou intrigado com as aspas duplas aninhadas. Tanto quanto posso dizer, os seguintes fragmentos são citados duas vezes:
"$( cd "
"${BASH_SOURCE[0]}"
" && pwd )"
... e tudo o mais à direita do =
(ie $( dirname
e )
) não é citado. Em outras palavras, suponho que os caracteres 2, 4 e 6 "
fechem os caracteres 1, 3 e 5 "
, respectivamente.
Entendo o que as aspas duplas "${BASH_SOURCE[0]}"
alcançam, mas qual é o objetivo dos outros dois pares de aspas duplas?
Se, por outro lado (e não obstante a alta pontuação dos votos), o trecho acima estiver incorreto, qual é o caminho certo para atingir sua intenção nominal?
(Por intenção nominal, quero dizer: colete o valor retornado pwd
depois de first cd
-ing no diretório retornado por dirname "${BASH_SOURCE[0]}"
e faça cd
-ing em um sub shell, para que o $PWD
shell pai permaneça inalterado).
lsb_dist="$(. /etc/os-release && echo "$ID")"; echo "$lsb_dist"
DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
funciona.
$( here, it's a subshell, but you are writing code as if you were writing it on the "first level" of the shell .... )
.