LINUX.ORG.RU

Bash: узнать полный путь до запущенного скрипта


0

0

Привет!

Есть задача присорсить все скрипты в текущей директории, беру скрипт:

#!/bin/sh for i in ./*-env.sh ; do if [ -r "$i" ]; then . $i fi done

Все работает до тех пор, пока не запустишь его из другой директории. Тогда "." соответственно показывает не туда (как и `pwd`) и файлики не находятся.

Как узнать полный путь к запущенному скрипту? В /etc/profile используют абсолютный путь, мне такое не подходит... Сенькс.

anonymous

Re: Bash: узнать полный путь до запущенного скрипта

Максимум что смог найти -- $DIRSTACK возвращает наименование директории, из которой запущен файл. В общем в итоге пришлось запускать pushd и popd.

anonymous ()

Re: Bash: узнать полный путь до запущенного скрипта

блин, я запутался где какой анонимус.
Решение с $0 давно указали
сейчас речь о том что dirname $0 не спасет в случаях
. script
или
cat script | sh -s

но с другой стороны от этого и не спасешься поэтому не нужно спасать

dilmah ★★★★★ ()

Re: Bash: узнать полный путь до запущенного скрипта

Если я правильно уразумел, то

#!/bin/bash

BASEDIR=`dirname $0`
PROJECT_PATH=`cd $BASEDIR; pwd`

echo 'Using path: ' $PROJECT_PATH
echo 'BASEDIR: $BASEDIR'



vitus@[vitus.xxx.lcl]:~> ../../tmp/1.sh
Using path: /tmp
BASEDIR: ../../tmp

vitus@[vitus.xxx.lcl]:~>/tmp/1.sh
Using path: /tmp
BASEDIR: /tmp

vtVitus ★★★★★ ()

Re: Bash: узнать полный путь до запущенного скрипта

Не надо так делать. По меньшей мере по двум техническим причинам:

1) узнать путь к файлу -- сплошь шаманство (см. архивы fido7.ru.unix.prog);

2) скрипт вообще не из файла может вызываться.

И в целом, это какой-то windows way.

fk0 ()

Re: Bash: узнать полный путь до запущенного скрипта

можно проще, забить в переменную имя скрипта

---
#!/bin/bash

PATH=`pwd`
NAME="test.sh"
echo "$PATH/$NAME"
---


$ /tmp/temp/test.sh
/tmp/temp/test.sh

$ ./test.sh
/tmp/temp/test.sh

$ ../temp/test.sh
/tmp/temp/test.sh

x97Rang ★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.