bash полный путь до скрипта
Модераторы: /dev/random, Модераторы разделов
bash полный путь до скрипта
Как в моем скрипте (bash) вывести полный путь до моего (выполняемого) скрипта.
Очень интересует
Очень интересует
-
- Сообщения: 145
- ОС: Kubuntu, Gentoo
Re: bash полный путь до скрипта
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.
The more you believe you don't do mistakes, the more bugs are in your code.
Re: bash полный путь до скрипта
which
Тока проги которые в PATH есть...
echo $0
Выводит текущее имя моего скрипта ... зачем?
Re: bash полный путь до скрипта
current_path=`pwd`/`echo $0 | sed "s/.\///g"`
Re: bash полный путь до скрипта
Выводит текущее имя моего скрипта ... зачем?
А это не тоже самое, что полный путь до скрипта?
Я полагаю вы запустили как ./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
Re: bash полный путь до скрипта
pcodr
Спасибо! Так работает!!!
Спасибо! Так работает!!!
- /dev/random
- Администратор
- Сообщения: 5289
- ОС: Gentoo
Re: bash полный путь до скрипта
Если скрипт имеет флаг 'executable', то правильнее всего было бы, наверное, which "$0". Приведённый выше пример не будет работать, например, с таким запуском: ../scripts/script. which же сработает правильно (но только при условии, что ../scripts/script существует, и имеет флаг executable)
Re: bash полный путь до скрипта
Да, про .. забыл совсем.
which "$0" попробовал, в случаи с ../script точно как и мой пример выше работает - неправильно, скрипт испоняемый
Я проникся этим вопросом и изготовил новую версию, оцените
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
Re: bash полный путь до скрипта
/dev/random
Создал в дом. каталоге файл "testsh".
написал там
Сделал его исполняемым. запускаю прямо оттуда..
Где тут полный путь?
Я так понимаю это супер универсальный способ?
Создал в дом. каталоге файл "testsh".
написал там
#!/bin/bash
which "$0"
Сделал его исполняемым. запускаю прямо оттуда..
aleman@aleman-desktop:~$ ./testsh
./testsh <--- ответ
aleman@aleman-desktop:~$
Где тут полный путь?
Я так понимаю это супер универсальный способ?
- /dev/random
- Администратор
- Сообщения: 5289
- ОС: Gentoo
Re: bash полный путь до скрипта
Код: Выделить всё
>=[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 полный путь до скрипта
Блин, вспомнил! Помню же, была команда, предназначенная специально для этого, но из головы вылетела... realpath !!!