Discussion:
[shell-script] Pegar o diretório onde está o script
Tiago Tarifa Munhoz tiagotarifa@gmail.com [shell-script]
2018-08-09 13:29:46 UTC
Permalink
Pessoal,

Alguém sabe como pegar o diretório onde está o script sem usar comandos
externos, ou seja, usando apenas o bash.
Eu vejo muito scripts usando desta forma:
dir="$(dirname $0)"
Porém se eu chamar o script no diretório onde está o script ele retorna '.'

Eu vi outro que resolve:
dir="$(dirname $(readlink -e $0))"
Porém precisa de 2 subshells para coletar algo que considero simples para o
Bash coletar.

Eu pesquisei porcamente no manual do Bash e não achei nada. E no meu
ambiente o readlink e dirname são comandos externos.
Raul Libório rauhmaru@gmail.com [shell-script]
2018-08-09 14:01:29 UTC
Permalink
Não sei se entendi bem, mas a variável PWD mostra qual o seu diretório
corrente.
Então, se no começo do script, você entrar no mesmo diretório que ele está
e depois extrair o valor de PWD, vai ter o caminho do script. Deu pra
entender?

***@jxqe:/var/www# echo $PWD
/var/www
***@jxqe:/var/www# cd /tmp
***@jxqe:/tmp# echo $PWD
/tmp
Post by Tiago Tarifa Munhoz ***@gmail.com [shell-script]
Pessoal,
Alguém sabe como pegar o diretório onde está o script sem usar comandos
externos, ou seja, usando apenas o bash.
dir="$(dirname $0)"
Porém se eu chamar o script no diretório onde está o script ele retorna '.'
dir="$(dirname $(readlink -e $0))"
Porém precisa de 2 subshells para coletar algo que considero simples para
o Bash coletar.
Eu pesquisei porcamente no manual do Bash e não achei nada. E no meu
ambiente o readlink e dirname são comandos externos.
--
Raul Libório
http://rauhmaru.blogspot.com/
openSUSE Member | Linux User #4444581

/etc/httpd/conf.d/ssl.conf:7
# Do NOT simply read the instructions in here without understanding
# what they do. They're here only as hints or reminders. If you are unsure
# consult the online docs. You have been warned.
Tiago Tarifa Munhoz tiagotarifa@gmail.com [shell-script]
2018-08-09 14:23:27 UTC
Permalink
Raul e Luiz Carlos, obrigado pelas respostas!

Acho que não me expressei bem. Vou exemplificar melhor:

Dentro de um script, quando eu quero pegar o diretório onde meu script
está, normalmente eu uso isto:
dir="$(dirname $(readlink -e $0))"

se ele estiver sendo executado dentro de /tmp/teste/meuscript.sh, a
variável $dir terá o seguinte conteúdo:
'/tmp/teste'
independente de qual diretório estou para chamar o meu script.

Se eu estiver em '/home/tiago' e executar '/tmp/teste/meuscript.sh' o valor
de $dir não muda

a variável do sistema $PWD e o comando pwd retornam o diretório onde meu
usuário está, ou seja, '/home/tiago'

O problema dos comandos dirname e readlink é que não são internos do bash e
portando mais demorados para executá-los.
O "capricho" que eu quero é o bash, de alguma forma, me retornar este mesmo
valor de $dir citado acima
Post by Raul Libório ***@gmail.com [shell-script]
Não sei se entendi bem, mas a variável PWD mostra qual o seu diretório
corrente.
Então, se no começo do script, você entrar no mesmo diretório que ele está
e depois extrair o valor de PWD, vai ter o caminho do script. Deu pra
entender?
/var/www
/tmp
Em qui, 9 de ago de 2018 às 10:37, Tiago Tarifa Munhoz
Post by Tiago Tarifa Munhoz ***@gmail.com [shell-script]
Pessoal,
Alguém sabe como pegar o diretório onde está o script sem usar comandos
externos, ou seja, usando apenas o bash.
dir="$(dirname $0)"
Porém se eu chamar o script no diretório onde está o script ele retorna '.'
dir="$(dirname $(readlink -e $0))"
Porém precisa de 2 subshells para coletar algo que considero simples para
o Bash coletar.
Eu pesquisei porcamente no manual do Bash e não achei nada. E no meu
ambiente o readlink e dirname são comandos externos.
--
Raul Libório
http://rauhmaru.blogspot.com/
openSUSE Member | Linux User #4444581
/etc/httpd/conf.d/ssl.conf:7
# Do NOT simply read the instructions in here without understanding
# what they do. They're here only as hints or reminders. If you are unsure
# consult the online docs. You have been warned.
Vinicius Costa Carvalho vinicius@carvalho.inf.br [shell-script]
2018-08-09 14:33:06 UTC
Permalink
Talvez assim então:

dir=${0%/*}

[]s,
Post by Tiago Tarifa Munhoz ***@gmail.com [shell-script]
Raul e Luiz Carlos, obrigado pelas respostas!
Dentro de um script, quando eu quero pegar o diretório onde meu script
dir="$(dirname $(readlink -e $0))"
se ele estiver sendo executado dentro de /tmp/teste/meuscript.sh, a
'/tmp/teste'
independente de qual diretório estou para chamar o meu script.
Se eu estiver em '/home/tiago' e executar '/tmp/teste/meuscript.sh' o
valor de $dir não muda
a variável do sistema $PWD e o comando pwd retornam o diretório onde meu
usuário está, ou seja, '/home/tiago'
O problema dos comandos dirname e readlink é que não são internos do bash
e portando mais demorados para executá-los.
O "capricho" que eu quero é o bash, de alguma forma, me retornar este
mesmo valor de $dir citado acima
Post by Raul Libório ***@gmail.com [shell-script]
Não sei se entendi bem, mas a variável PWD mostra qual o seu diretório
corrente.
Então, se no começo do script, você entrar no mesmo diretório que ele
está e depois extrair o valor de PWD, vai ter o caminho do script. Deu pra
entender?
/var/www
/tmp
Em qui, 9 de ago de 2018 às 10:37, Tiago Tarifa Munhoz
Post by Tiago Tarifa Munhoz ***@gmail.com [shell-script]
Pessoal,
Alguém sabe como pegar o diretório onde está o script sem usar comandos
externos, ou seja, usando apenas o bash.
dir="$(dirname $0)"
Porém se eu chamar o script no diretório onde está o script ele retorna '.'
dir="$(dirname $(readlink -e $0))"
Porém precisa de 2 subshells para coletar algo que considero simples
para o Bash coletar.
Eu pesquisei porcamente no manual do Bash e não achei nada. E no meu
ambiente o readlink e dirname são comandos externos.
--
Raul Libório
http://rauhmaru.blogspot.com/
openSUSE Member | Linux User #4444581
/etc/httpd/conf.d/ssl.conf:7
# Do NOT simply read the instructions in here without understanding
# what they do. They're here only as hints or reminders. If you are unsure
# consult the online docs. You have been warned.
--
Vinicius Costa Carvalho

"Se enxerguei mais longe, foi porque me apoiei sobre os ombros de gigantes."
*Isaac Newton*
Luiz Carlos Maciel Junior lmacieljr@mknet.com.br [shell-script]
2018-08-09 15:13:34 UTC
Permalink
Oi Tiago,

Partindo da premissa que você acabou de chamar o script, o Bash tem a
variável $? que te mostra o último comando executado.

Então você terá nela todo o caminho do seu script, independente do
diretório onde você estiver.

Assim funciona?

Abraços

Luiz
Post by Tiago Tarifa Munhoz ***@gmail.com [shell-script]
Raul e Luiz Carlos, obrigado pelas respostas!
Dentro de um script, quando eu quero pegar o diretório onde meu script
dir="$(dirname $(readlink -e $0))"
se ele estiver sendo executado dentro de /tmp/teste/meuscript.sh, a
'/tmp/teste'
independente de qual diretório estou para chamar o meu script.
Se eu estiver em '/home/tiago' e executar '/tmp/teste/meuscript.sh' o
valor de $dir não muda
a variável do sistema $PWD e o comando pwd retornam o diretório onde
meu usuário está, ou seja, '/home/tiago'
O problema dos comandos dirname e readlink é que não são internos do
bash e portando mais demorados para executá-los.
O "capricho" que eu quero é o bash, de alguma forma, me retornar este
mesmo valor de $dir citado acima
Não sei se entendi bem, mas a variável PWD mostra qual o seu
diretório corrente.
Então, se no começo do script, você entrar no mesmo diretório que
ele está e depois extrair o valor de PWD, vai ter o caminho do
script. Deu pra entender?
/var/www
/tmp
Em qui, 9 de ago de 2018 às 10:37, Tiago Tarifa Munhoz
Pessoal,
Alguém sabe como pegar o diretório onde está o script sem usar
comandos externos, ou seja, usando apenas o bash.
dir="$(dirname $0)"
Porém se eu chamar o script no diretório onde está o script
ele retorna '.'
dir="$(dirname $(readlink -e $0))"
Porém precisa de 2 subshells para coletar algo que considero
simples para o Bash coletar.
Eu pesquisei porcamente no manual do Bash e não achei nada. E
no meu ambiente o readlink e dirname são comandos externos.
--
Raul Libório
http://rauhmaru.blogspot.com/
openSUSE Member | Linux User #4444581
/etc/httpd/conf.d/ssl.conf:7
# Do NOT simply read the instructions in here without understanding
# what they do.  They're here only as hints or reminders.  If you
are unsure
# consult the online docs. You have been warned.
Luiz Carlos Maciel Junior lmacieljr@mknet.com.br [shell-script]
2018-08-09 15:18:45 UTC
Permalink
Que bobagem eu escrevi!!!!

Esquece o que eu disse. Está errado.

:-!
Post by Luiz Carlos Maciel Junior ***@mknet.com.br [shell-script]
Oi Tiago,
Partindo da premissa que você acabou de chamar o script, o Bash tem a
variável $? que te mostra o último comando executado.
Então você terá nela todo o caminho do seu script, independente do
diretório onde você estiver.
Assim funciona?
Abraços
Luiz
Post by Tiago Tarifa Munhoz ***@gmail.com [shell-script]
Raul e Luiz Carlos, obrigado pelas respostas!
Dentro de um script, quando eu quero pegar o diretório onde meu
dir="$(dirname $(readlink -e $0))"
se ele estiver sendo executado dentro de /tmp/teste/meuscript.sh, a
'/tmp/teste'
independente de qual diretório estou para chamar o meu script.
Se eu estiver em '/home/tiago' e executar '/tmp/teste/meuscript.sh' o
valor de $dir não muda
a variável do sistema $PWD e o comando pwd retornam o diretório onde
meu usuário está, ou seja, '/home/tiago'
O problema dos comandos dirname e readlink é que não são internos do
bash e portando mais demorados para executá-los.
O "capricho" que eu quero é o bash, de alguma forma, me retornar este
mesmo valor de $dir citado acima
Não sei se entendi bem, mas a variável PWD mostra qual o seu
diretório corrente.
Então, se no começo do script, você entrar no mesmo diretório que
ele está e depois extrair o valor de PWD, vai ter o caminho do
script. Deu pra entender?
/var/www
/tmp
Em qui, 9 de ago de 2018 às 10:37, Tiago Tarifa Munhoz
Pessoal,
Alguém sabe como pegar o diretório onde está o script sem
usar comandos externos, ou seja, usando apenas o bash.
dir="$(dirname $0)"
Porém se eu chamar o script no diretório onde está o script
ele retorna '.'
dir="$(dirname $(readlink -e $0))"
Porém precisa de 2 subshells para coletar algo que considero
simples para o Bash coletar.
Eu pesquisei porcamente no manual do Bash e não achei nada. E
no meu ambiente o readlink e dirname são comandos externos.
--
Raul Libório
http://rauhmaru.blogspot.com/
openSUSE Member | Linux User #4444581
/etc/httpd/conf.d/ssl.conf:7
# Do NOT simply read the instructions in here without understanding
# what they do.  They're here only as hints or reminders.  If you
are unsure
# consult the online docs. You have been warned.
Maik Alberto maik.alberto@hotmail.com [shell-script]
2018-08-09 15:16:49 UTC
Permalink
Veja se um dos dois atende:

dir="$(dirname $0)"
if dir="."; then
echo $PWD
else
echo $dir
fi


------------------------------------------------------


SCRIPT=$(readlink -f $0)
SCRIPTPATH=`dirname $SCRIPT`
echo $SCRIPTPATH



________________________________
De: shell-***@yahoogrupos.com.br <shell-***@yahoogrupos.com.br> em nome de Tiago Tarifa Munhoz ***@gmail.com [shell-script] <shell-***@yahoogrupos.com.br>
Enviado: quinta-feira, 9 de agosto de 2018 11:23
Para: grupo shell script
Assunto: Re: [shell-script] Pegar o diretório onde está o script



Raul e Luiz Carlos, obrigado pelas respostas!

Acho que não me expressei bem. Vou exemplificar melhor:

Dentro de um script, quando eu quero pegar o diretório onde meu script está, normalmente eu uso isto:
dir="$(dirname $(readlink -e $0))"

se ele estiver sendo executado dentro de /tmp/teste/meuscript.sh, a variável $dir terá o seguinte conteúdo:
'/tmp/teste'
independente de qual diretório estou para chamar o meu script.

Se eu estiver em '/home/tiago' e executar '/tmp/teste/meuscript.sh' o valor de $dir não muda

a variável do sistema $PWD e o comando pwd retornam o diretório onde meu usuário está, ou seja, '/home/tiago'

O problema dos comandos dirname e readlink é que não são internos do bash e portando mais demorados para executá-los.
O "capricho" que eu quero é o bash, de alguma forma, me retornar este mesmo valor de $dir citado acima





Em 9 de agosto de 2018 11:01, Raul Libório ***@gmail.com<mailto:***@gmail.com> [shell-script] <shell-***@yahoogrupos.com.br<mailto:shell-***@yahoogrupos.com.br>> escreveu:


Não sei se entendi bem, mas a variável PWD mostra qual o seu diretório corrente.
Então, se no começo do script, você entrar no mesmo diretório que ele está e depois extrair o valor de PWD, vai ter o caminho do script. Deu pra entender?

***@jxqe:/var/www# echo $PWD
/var/www
***@jxqe:/var/www# cd /tmp
***@jxqe:/tmp# echo $PWD
/tmp



Em qui, 9 de ago de 2018 às 10:37, Tiago Tarifa Munhoz ***@gmail.com<mailto:***@gmail.com> [shell-script] <shell-***@yahoogrupos.com..br<mailto:shell-***@yahoogrupos.com.br>> escreveu:


Pessoal,

Alguém sabe como pegar o diretório onde está o script sem usar comandos externos, ou seja, usando apenas o bash.
Eu vejo muito scripts usando desta forma:
dir="$(dirname $0)"
Porém se eu chamar o script no diretório onde está o script ele retorna '.'

Eu vi outro que resolve:
dir="$(dirname $(readlink -e $0))"
Porém precisa de 2 subshells para coletar algo que considero simples para o Bash coletar.

Eu pesquisei porcamente no manual do Bash e não achei nada. E no meu ambiente o readlink e dirname são comandos externos.


--
Raul Libório
http://rauhmaru.blogspot.com/
openSUSE Member | Linux User #4444581

/etc/httpd/conf.d/ssl.conf:7
# Do NOT simply read the instructions in here without understanding
# what they do. They're here only as hints or reminders. If you are unsure
# consult the online docs. You have been warned.
Vinicius Costa Carvalho vinicius@carvalho.inf.br [shell-script]
2018-08-09 14:03:57 UTC
Permalink
Caso não seja o diretório, você pode pegar da variável $0

[]s,
Post by Raul Libório ***@gmail.com [shell-script]
Não sei se entendi bem, mas a variável PWD mostra qual o seu diretório
corrente.
Então, se no começo do script, você entrar no mesmo diretório que ele está
e depois extrair o valor de PWD, vai ter o caminho do script. Deu pra
entender?
/var/www
/tmp
Em qui, 9 de ago de 2018 às 10:37, Tiago Tarifa Munhoz
Post by Tiago Tarifa Munhoz ***@gmail.com [shell-script]
Pessoal,
Alguém sabe como pegar o diretório onde está o script sem usar comandos
externos, ou seja, usando apenas o bash.
dir="$(dirname $0)"
Porém se eu chamar o script no diretório onde está o script ele retorna '.'
dir="$(dirname $(readlink -e $0))"
Porém precisa de 2 subshells para coletar algo que considero simples para
o Bash coletar.
Eu pesquisei porcamente no manual do Bash e não achei nada. E no meu
ambiente o readlink e dirname são comandos externos.
--
Raul Libório
http://rauhmaru.blogspot.com/
openSUSE Member | Linux User #4444581
/etc/httpd/conf.d/ssl.conf:7
# Do NOT simply read the instructions in here without understanding
# what they do. They're here only as hints or reminders. If you are unsure
# consult the online docs. You have been warned.
--
Vinicius Costa Carvalho

"Se enxerguei mais longe, foi porque me apoiei sobre os ombros de gigantes."
*Isaac Newton*
Luiz Carlos Maciel Junior lmacieljr@mknet.com.br [shell-script]
2018-08-09 14:04:22 UTC
Permalink
Oi Tiago,

Por acaso o pwd não resolve?

Abraços

Luiz
Post by Tiago Tarifa Munhoz ***@gmail.com [shell-script]
Pessoal,
Alguém sabe como pegar o diretório onde está o script sem usar
comandos externos, ou seja, usando apenas o bash.
dir="$(dirname $0)"
Porém se eu chamar o script no diretório onde está o script ele retorna '.'
dir="$(dirname $(readlink -e $0))"
Porém precisa de 2 subshells para coletar algo que considero simples
para o Bash coletar.
Eu pesquisei porcamente no manual do Bash e não achei nada. E no meu
ambiente o readlink e dirname são comandos externos.
Maik Alberto maik.alberto@hotmail.com [shell-script]
2018-08-09 13:55:59 UTC
Permalink
$PWD


________________________________
De: shell-***@yahoogrupos.com.br <shell-***@yahoogrupos.com.br> em nome de Tiago Tarifa Munhoz ***@gmail.com [shell-script] <shell-***@yahoogrupos.com.br>
Enviado: quinta-feira, 9 de agosto de 2018 10:29
Para: grupo shell script
Assunto: [shell-script] Pegar o diretório onde está o script



Pessoal,

Alguém sabe como pegar o diretório onde está o script sem usar comandos externos, ou seja, usando apenas o bash.
Eu vejo muito scripts usando desta forma:
dir="$(dirname $0)"
Porém se eu chamar o script no diretório onde está o script ele retorna '.'

Eu vi outro que resolve:
dir="$(dirname $(readlink -e $0))"
Porém precisa de 2 subshells para coletar algo que considero simples para o Bash coletar.

Eu pesquisei porcamente no manual do Bash e não achei nada. E no meu ambiente o readlink e dirname são comandos externos.
Tiago Tarifa Munhoz tiagotarifa@gmail.com [shell-script]
2018-08-09 16:29:18 UTC
Permalink
Lendo o manual do bash menos "porcamente" eu cheguei na solução abaixo:





*if [[ "$0" =~ ^\. ]]then echo "achou o . :$PWD"else echo "achou o
dir: ${0%/*}"fi*

Ou seja, no meu script ficará assim:








*if [[ "$0" =~ ^\. ]]then dir="$PWD"else dir="${0%/*}"fi*
A solução é toda em bash, não precisando de comandos externos. Porém se
alguém tiver algo mais simples eu agradeço.

*Lembrando que a premissa é: usando somente o bash*

Agradeço a contribuição de todos até o momento.
Post by Tiago Tarifa Munhoz ***@gmail.com [shell-script]
Pessoal,
Alguém sabe como pegar o diretório onde está o script sem usar comandos
externos, ou seja, usando apenas o bash.
dir="$(dirname $0)"
Porém se eu chamar o script no diretório onde está o script ele retorna '.'
dir="$(dirname $(readlink -e $0))"
Porém precisa de 2 subshells para coletar algo que considero simples para
o Bash coletar.
Eu pesquisei porcamente no manual do Bash e não achei nada. E no meu
ambiente o readlink e dirname são comandos externos.
Maik Alberto maik.alberto@hotmail.com [shell-script]
2018-08-09 17:47:19 UTC
Permalink
Vê se isso da certo:


dir=${0%/*}
echo ${dir/./$PWD}



________________________________
De: shell-***@yahoogrupos.com.br <shell-***@yahoogrupos.com.br> em nome de Tiago Tarifa Munhoz ***@gmail.com [shell-script] <shell-***@yahoogrupos.com.br>
Enviado: quinta-feira, 9 de agosto de 2018 13:29
Para: grupo shell script
Assunto: [shell-script] Re: Pegar o diretório onde está o script



Lendo o manual do bash menos "porcamente" eu cheguei na solução abaixo:
if [[ "$0" =~ ^\. ]]
then
echo "achou o . :$PWD"
else
echo "achou o dir: ${0%/*}"
fi

Ou seja, no meu script ficará assim:

if [[ "$0" =~ ^\. ]]
then
dir="$PWD"
else
dir="${0%/*}"
fi

A solução é toda em bash, não precisando de comandos externos. Porém se alguém tiver algo mais simples eu agradeço.

Lembrando que a premissa é: usando somente o bash

Agradeço a contribuição de todos até o momento.


Em 9 de agosto de 2018 10:29, Tiago Tarifa Munhoz <***@gmail.com<mailto:***@gmail.com>> escreveu:
Pessoal,

Alguém sabe como pegar o diretório onde está o script sem usar comandos externos, ou seja, usando apenas o bash.
Eu vejo muito scripts usando desta forma:
dir="$(dirname $0)"
Porém se eu chamar o script no diretório onde está o script ele retorna '.'

Eu vi outro que resolve:
dir="$(dirname $(readlink -e $0))"
Porém precisa de 2 subshells para coletar algo que considero simples para o Bash coletar.

Eu pesquisei porcamente no manual do Bash e não achei nada. E no meu ambiente o readlink e dirname são comandos externos.
Rogerio Batista rogbatista@gmail.com [shell-script]
2018-08-09 18:02:38 UTC
Permalink
DIR=`dirname $0`
[ ${DIR} = "." ];DIR=`pwd`
Post by Vinicius Costa Carvalho ***@carvalho.inf.br [shell-script]
dir=${0%/*}
echo ${dir/./$PWD}
------------------------------
*Enviado:* quinta-feira, 9 de agosto de 2018 13:29
*Para:* grupo shell script
*Assunto:* [shell-script] Re: Pegar o diretório onde está o script
*if [[ "$0" =~ ^\. ]] then echo "achou o . :$PWD" else echo "achou
o dir: ${0%/*}" fi*
*if [[ "$0" =~ ^\. ]] then dir="$PWD" else dir="${0%/*}" fi *
A solução é toda em bash, não precisando de comandos externos. Porém se
alguém tiver algo mais simples eu agradeço.
*Lembrando que a premissa é: usando somente o bash*
Agradeço a contribuição de todos até o momento.
Pessoal,
Alguém sabe como pegar o diretório onde está o script sem usar comandos
externos, ou seja, usando apenas o bash.
dir="$(dirname $0)"
Porém se eu chamar o script no diretório onde está o script ele retorna '.'
dir="$(dirname $(readlink -e $0))"
Porém precisa de 2 subshells para coletar algo que considero simples para
o Bash coletar.
Eu pesquisei porcamente no manual do Bash e não achei nada. E no meu
ambiente o readlink e dirname são comandos externos.
Loading...