LINUX.ORG.RU

cd `dirname $0`; echo «$PWD»


0

0

Ищу как-то в гуле ответ на один вопрос. Нахожу по второй же ссылке:

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

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

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

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

Как узнать полный путь к запущенному скрипту? В /etc/profile используют абсолютный путь, мне такое не подходит... Сенькс. anonymous (*) (07.12.2006 13:31:16)

И ответ:

d=`dirname «$0»` fullpath=`cd «$d»; pwd`/`basename «$0»`

Казалось бы все отлично, но тут ниже читаю:

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

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

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

И в целом, это какой-то windows way. fk0 (*) (10.12.2006 4:41:41)

Уважаемый, фикей-нуль, вот скажите: 1) Вас спашивали о каких-то шаманах? В вопросе просто звучало слово «как» 2) Где Вы увидели, что человеку нужно будет вызывать скрипт не из файла? Если подобный функционал требуется, естественно, что он из файла только и будет запускаться. А прописывать полный путь или гадить в сиситемные каталоги своими скриптами - красивее что ли? windows-way вам не угодил? Насмотрелся я на ваш linux-way, где ни одна гуишка по-человечески работать не умеет, а если и умеет немного, то либо глючит, либо течет, либо вылетает, либо проект уже заброшен и заростает плесенью.

Толсто. Найти тему 3-х летней давности и пытаться устройть что?

Сама формулировка задачи:

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

>Тогда "." соответственно показывает не туда

Куда не туда показывает "."? Не в текущий каталог что-ли? Если нужно "присорсить" всё из каталога, где лежит скрипт, так бы и писали.

mky ★★★★★
()
Ответ на: комментарий от splinter

что такое linux-way?

«Делать невозможное через жопу.» =)

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

А сколько злобы-то, сколько ненависти!

Зато в чем вопрос я так и не понял.

Да просто надоело ищешь в гугле что-нибудь, натыкаешься на форумы, где либо посылают обратно в гугл, либо говорят, что это все нам не нравится, поэтому что это все все windows-вэй.

А вопрос простой... Человек пишет свой скрипт, сохраняет его в некую папку. В той же папке например есть другие скрипты этого человека. Вопрос, как из первого скрипта запустить остальные скрипты. При этом эта папка не находится в переменной $PATH, а скрипт может запускаться как угодно, и когда эта папка является текущей, и когда другая папка текущая, т.е либо ./somescript.sh, либо somedir1/somedir2/.../somedirn/somescript.sh, либо /somed1/somed2/.../somedirn/somescript.sh. При этом, если мы перекинем папку с этим скриптом в другой каталог, то скрипт должен продолжать корректно запускаться без переправки (звучит странно, но такое бывает полезно). Простите я расширил вопрос, но правильный ответ от этого не меняется :)

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

ну тогда используй dirname $0.

duad:/home/drull/tmp# cat dir1/1
echo "i am script 1. trying to execute script 2.(`dirname $0`/2)"
`dirname $0`/2
duad:/home/drull/tmp# cat dir1/2
echo "i am script 2."
duad:/home/drull/tmp# ./dir1/1
i am script 1. trying to execute script 2.(./dir1/2)
i am script 2.
duad:/home/drull/tmp# mv dir1 dir2
duad:/home/drull/tmp# ./dir2/dir1/1
i am script 1. trying to execute script 2.(./dir2/dir1/2)
i am script 2.
drull ★☆☆☆
()
Ответ на: комментарий от xydo

ээээээээээ........

dirname $PWD/$0 ????????777777777777...........

$ cat test/test.sh 
#!/bin/sh

dirname $PWD/$0

$ PATH="$PATH:/home/user/test"

$ test.sh
/home/user//home/user/test

ЭЭЭЭЭЭ ыыыыыы!!!!!!!!!!111111111111111...........

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