bash полный путь до скрипта

На самом деле это единственный раздел про unix на этом форуме

Модераторы: /dev/random, Модераторы разделов

Ответить
Aleman
Сообщения: 109

bash полный путь до скрипта

Сообщение Aleman »

Как в моем скрипте (bash) вывести полный путь до моего (выполняемого) скрипта.
Очень интересует
Спасибо сказали:
un-defined
Сообщения: 145
ОС: Kubuntu, Gentoo

Re: bash полный путь до скрипта

Сообщение un-defined »

Aleman писал(а):
30.05.2008 06:12
Как в моем скрипте (bash) вывести полный путь до моего (выполняемого) скрипта.
Очень интересует


pwd?
Don`t try - just do or do not ©Master Joda
Спасибо сказали:
Аватара пользователя
SLEDopit
Модератор
Сообщения: 4823
Статус: фанат консоли (=
ОС: GNU/Debian, RHEL

Re: bash полный путь до скрипта

Сообщение SLEDopit »

un-defined писал(а):
30.05.2008 08:01
pwd?

pwd выводит текущую директорию. если нужно узнать к примеру расположение скрипта rm то

Код: Выделить всё

user:~# whereis rm
rm: /bin/rm /usr/share/man/man1/rm.1.gz
user:~# which rm
/bin/rm
UNIX is basically a simple operating system, but you have to be a genius to understand the simplicity. © Dennis Ritchie
The more you believe you don't do mistakes, the more bugs are in your code.
Спасибо сказали:
pcodr
Сообщения: 283
ОС: Debian

Re: bash полный путь до скрипта

Сообщение pcodr »

echo $0
remote system type is unix
Спасибо сказали:
Aleman
Сообщения: 109

Re: bash полный путь до скрипта

Сообщение Aleman »

which

Тока проги которые в PATH есть...
echo $0

Выводит текущее имя моего скрипта ... зачем?
Спасибо сказали:
arch
Сообщения: 74
ОС: freebsd/arch

Re: bash полный путь до скрипта

Сообщение arch »

current_path=`pwd`/`echo $0 | sed "s/.\///g"`
Спасибо сказали:
pcodr
Сообщения: 283
ОС: Debian

Re: bash полный путь до скрипта

Сообщение pcodr »

Выводит текущее имя моего скрипта ... зачем?


А это не тоже самое, что полный путь до скрипта?
Я полагаю вы запустили как ./script ?
Ну тогда модифицированный вариант специально для вас

Код: Выделить всё

#!/bin/bash

MYPATH=$0
TESTSTR=${MYPATH:0:2}
if [ $TESTSTR = "./" ]; then
        MYPATH=`pwd`${MYPATH:1}
fi
echo $MYPATH


arch, немного глючит если запускать указывая полный путь до скрипта,
remote system type is unix
Спасибо сказали:
Aleman
Сообщения: 109

Re: bash полный путь до скрипта

Сообщение Aleman »

pcodr
Спасибо! Так работает!!!
Спасибо сказали:
Аватара пользователя
/dev/random
Администратор
Сообщения: 5289
ОС: Gentoo

Re: bash полный путь до скрипта

Сообщение /dev/random »

Если скрипт имеет флаг 'executable', то правильнее всего было бы, наверное, which "$0". Приведённый выше пример не будет работать, например, с таким запуском: ../scripts/script. which же сработает правильно (но только при условии, что ../scripts/script существует, и имеет флаг executable)
Спасибо сказали:
pcodr
Сообщения: 283
ОС: Debian

Re: bash полный путь до скрипта

Сообщение pcodr »

Да, про .. забыл совсем.
which "$0" попробовал, в случаи с ../script точно как и мой пример выше работает - неправильно, скрипт испоняемый

Я проникся этим вопросом и изготовил новую версию, оцените :)

Код: Выделить всё

#!/bin/bash

SCRIPT_PATH=$0;
if [ `expr match "$SCRIPT_PATH" "\(.*/\.\./\)"` ] || [ `expr match "$SCRIPT_PATH" "\(\./\)"` ] || [ `expr match "$SCRIPT_PATH" "\(\.\./\)"` ]; then
    CURPATH=`pwd`
    CDPATH=`expr match "$SCRIPT_PATH" "\(.*/\)"`
    cd $CDPATH
    SCRIPT_PATH=`pwd`/${SCRIPT_PATH:${#CDPATH}}
    cd $CURPATH
fi
echo $SCRIPT_PATH
remote system type is unix
Спасибо сказали:
Aleman
Сообщения: 109

Re: bash полный путь до скрипта

Сообщение Aleman »

/dev/random
Создал в дом. каталоге файл "testsh".
написал там
#!/bin/bash
which "$0"

Сделал его исполняемым. запускаю прямо оттуда..
aleman@aleman-desktop:~$ ./testsh
./testsh <--- ответ
aleman@aleman-desktop:~$

Где тут полный путь?

pcodr писал(а):
30.05.2008 18:01
Я проникся этим вопросом и изготовил новую версию, оцените

Я так понимаю это супер универсальный способ?
Спасибо сказали:
Аватара пользователя
/dev/random
Администратор
Сообщения: 5289
ОС: Gentoo

Re: bash полный путь до скрипта

Сообщение /dev/random »

Код: Выделить всё

>=[ogxbtr@desktop]=[00:02]=<?1>=<&0>=<
[1:/common/ogxbtr-data/scripts]
$ cat temp.sh
#!/bin/bash

which "$0"


>=[ogxbtr@desktop]=[00:02]=<?0>=<&0>=<
[1:/common/ogxbtr-data/scripts]
$ ./temp.sh
/common/ogxbtr-data/scripts/temp.sh

>=[ogxbtr@desktop]=[00:02]=<?0>=<&0>=<
[1:/common/ogxbtr-data/scripts]
$
Спасибо сказали:
Аватара пользователя
/dev/random
Администратор
Сообщения: 5289
ОС: Gentoo

Re: bash полный путь до скрипта

Сообщение /dev/random »

Блин, вспомнил! Помню же, была команда, предназначенная специально для этого, но из головы вылетела... realpath !!!
Спасибо сказали:
Aleman
Сообщения: 109

Re: bash полный путь до скрипта

Сообщение Aleman »

Спасибо, помогли :)
Спасибо сказали:
Ответить