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
Ответ на: комментарий от dilmah

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

anonymous
()
Ответ на: комментарий от anonymous

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

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

dilmah ★★★★★
()

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

#!/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 ★★★★★
()

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

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

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

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

fk0
()

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

---
#!/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 ★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.