Mám shell skript v /usr/bin
. Říkejme tomu hello
.
Obsahuje toto:
echo "I am located in $PWD"
echo "I am called from this directory: ???"
Spouští se hello
z /home/Documents
Očekávám následující výstup:
I am located in /usr/bin
I am called from this directory: /home/Documents
Jak mohu získat cestu k adresáři, ze kterého je skript spouštěn?
Přijatá odpověď:
Jinou odpověď nemohu komentovat, proto píšu sem. Jak již bylo řečeno, dirname
čte pouze $0
a převezme název adresáře, takže pokud jste zavolali něco jako ../../directory/something.sh
nevyřeší tyto tečky, ale pouze vrátí ../../directory
. Namísto použití rozšíření subshell pomocí cd
a pwd
, můžete použít velmi chytrý příkaz readlink
to ve skutečnosti řeší nejen tečkované adresáře, ale také všechny symbolické odkazy. Proto navrhuji
echo "I am located at $(readlink -e -- "$0")"
Můžete použít jiný dirname
kolem tohoto získáte adresář místo souboru.
Najít dva po sobě jdoucí opakované řádky?
Jak používat stejný alias Ssh s více hostitelskými adresami/porty/atd.?