cypok
@cypok

Небольшой вопрос про sh-скрипт?

Есть некоторый скрипт vars.sh:
export PATH=`pwd`/bin:$PATH


Работа с ним выглядит вот так:
$ cd /some/working/dir<br/>
$ great_app args<br/>
&nbsp;&nbsp;error: not found!<br/>
$ cd /some/interesting/dir<br/>
$ ls bin<br/>
&nbsp;&nbsp;great_app<br/>
$ . vars.sh<br/>
$ cd /some/working/dir<br/>
$ great_app args<br/>
&nbsp;&nbsp;i'm working!<br/>



Так как vars.sh использует pwd, то для его запуска требуется находится в той же папке, где и сам скрипт.


А хочется запускать vars.sh из любой папки, причем оставив весь пакет (скрипт vars.sh и папку bin) легко перемещаемыми из одной папки в другую, короче, без абсолютных путей.


В результате хочется так:
$ cd /some/working/dir<br/>
$ . /some/interesting/dir/vars.sh<br/>
$ great_app args<br/>
&nbsp;&nbsp;i'm working!<br/>



Мои попытки ни к чему хорошему не привели, может кто-нибудь знает, как это можно сделать?
  • Вопрос задан
  • 6404 просмотра
Пригласить эксперта
Ответы на вопрос 5
iSage
@iSage
Ежели я правильно понял:
export PATH=`dirname $0`/bin:$PATH
Ответ написан
@gribozavr
Лучше проще — сделайте себе алиас или функцию в ~/.bashrc.
Ответ написан
ob1
@ob1
К сожалению, недостаточно полно понял автора. Неужели будет достаточно добавить ./bin в PATNA?
Ответ написан
danfe
@danfe
Я делаю так: в начале скрипта завожу переменную MY_DIR:

MY_DIR=`readlink -f "$(dirname "$0")"`

Теперь в ней будет полный путь до скрипта, независимо, откуда его запустили. Запускать другие скрипты уже относительно этого каталога. Мне кажется, это предпочтительней, чем модифицировать PATH (пусть и временно).

Да, обратите внимание: все кавычки обязательны.
Ответ написан
3vi1_0n3
@3vi1_0n3
Вопрос ужас какой старый, тем не менее предложу свой вариант:
SCRIPT_NAME=${0##*/}
SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
FULL_SCRIPT_NAME=${SCRIPT_DIR}/${SCRIPT_NAME}
echo ${FULL_SCRIPT_NAME}

Можно таким образом получить полный путь к директории, откуда запускался скрипт, а также полное имя скрипта с путем.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы