Проверить есть ли каталог в $PATH

Модератор: Модераторы разделов

MMouXe
Сообщения: 252

Проверить есть ли каталог в $PATH

Сообщение MMouXe »

В общем нужно написать скрипт на баше, что была проверка переменной $PATH на наличие заданного мной каталога, а то если не проверять, то скрипт автоматом напихает сколько угодно одних и тех же путей.
Другими словами: как произвести поиск в переменной на наличие или отстуствие заданной строки.
з.ы. чувствуется что поиск фразы не сложен, но пока че-то не могу найти ничего вразумительного.
Спасибо сказали:
allez
Сообщения: 2223
Статус: Не очень злой админ :-)
ОС: SuSE, CentOS, FreeBSD, Windows

Re: Проверить есть ли каталог в $PATH

Сообщение allez »

echo $PATH | grep "/my/dir"
Спасибо сказали:
MMouXe
Сообщения: 252

Re: Проверить есть ли каталог в $PATH

Сообщение MMouXe »

Как ни странно, но вывод этой команды аналогичен echo $PATH, не происходит отсеивания :(
Спасибо сказали:
allez
Сообщения: 2223
Статус: Не очень злой админ :-)
ОС: SuSE, CentOS, FreeBSD, Windows

Re: Проверить есть ли каталог в $PATH

Сообщение allez »

Это означает, что в значении переменной присутствует ваш каталог. Если бы его там не было, команда возвратила бы пустую строку. В общем, man grep почитайте, пригодится. :)
Спасибо сказали:
MMouXe
Сообщения: 252

Re: Проверить есть ли каталог в $PATH

Сообщение MMouXe »

allez Действительно, огромное спасибо, а то я еще бы долго думал почему не то получается ;)
Просто я думал что должно быть именно отсеивание, т.е. как в ls | grep Desktop он выводит мне только каталог десктоп, а тут все выводились, вот это меня и смутило.
Спасибо сказали:
MMouXe
Сообщения: 252

Re: Проверить есть ли каталог в $PATH

Сообщение MMouXe »

Кстати, вот такой скрипт получился, правда, есть вопрос:
почему данный скрипт не добавляет путь в PATH, он добавляется только вручную, используя команду export PATH="$HOME/bin:$PATH"?

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

#!/bin/sh

if !(echo $PATH | grep "$HOME/bin" > /dev/null); then
export PATH="$HOME/bin:$PATH"
fi
Спасибо сказали:
allez
Сообщения: 2223
Статус: Не очень злой админ :-)
ОС: SuSE, CentOS, FreeBSD, Windows

Re: Проверить есть ли каталог в $PATH

Сообщение allez »

Этот скрипт изменяет переменную PATH в своем экземпляре оболочки, а не в том, в котором вы работаете. Попробуйте запустить его в своей текущей оболочке оператором "точка" (не забудьте поставить пробел между точкой и именем скрипта):
. /path/to/script.sh
Спасибо сказали:
Аватара пользователя
diesel
Бывший модератор
Сообщения: 5989
ОС: OS X, openSuSE, ROSA, Debian

Re: Проверить есть ли каталог в $PATH

Сообщение diesel »

MMouXe писал(а):
07.06.2008 21:30
allez Действительно, огромное спасибо, а то я еще бы долго думал почему не то получается ;)
Просто я думал что должно быть именно отсеивание, т.е. как в ls | grep Desktop он выводит мне только каталог десктоп, а тут все выводились, вот это меня и смутило.

grep -o покажет только тот кусок который соответствует :)

echo $PATH | grep "$HOME/bin" > /dev/null || export $PATH=$PATH:$HOME/bin
или еще проще(для относительно новых версий):
[[ $PATH =~ "$HOME/bin" ]] || export $PATH=$PATH:$HOME/bin
Спасибо сказали:
MMouXe
Сообщения: 252

Re: Проверить есть ли каталог в $PATH

Сообщение MMouXe »

Я пишу скрипт для автоматической установки java-программ с использованием скрипта Makeself (самораспаковывающийся архив).
Makeself после распаковки запускает мой скрипт, но в PATH путь не добавляется, а вот когда я запускаю терминал и выполняю скрипт (. script.sh), содержащий экспорт в PATH и вывод содержимого переменной, - все есть и при выводе скриптом содержимого переменной, и при его выводе затем мной. Почему после запуска моего скрипта скриптом Makeself переменная в терминале не сохраняется?
Вывод в файл сделал, так что теперь каталог присутствует всегда, но я хочу чтобы после выполнения скрипта Makeself была доступна прога по пути $HOME/bin сразу, а не после других телодвижений или ручного экспорта.
з.ы. не пинайте сильно, я новичок, подскажите хотя бы куда копать.
Спасибо сказали:
Аватара пользователя
КВН
Сообщения: 242
Статус: Новичок

Re: Проверить есть ли каталог в $PATH

Сообщение КВН »

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

archlinux% echo $PATH
/bin:/usr/bin:/sbin:/usr/sbin:/opt/kde/bin:/opt/mozilla/bin:/usr/bin/perlbin/site:/usr/bin/perlbin/vendor:/usr/bin/perlbin/core:/opt/qt/bin
archlinux% echo $PATH | grep -o /usr
/usr
/usr
/usr
/usr
/usr
archlinux% echo $PATH | grep -o :/usr:
archlinux%
Спасибо сказали:
Аватара пользователя
diesel
Бывший модератор
Сообщения: 5989
ОС: OS X, openSuSE, ROSA, Debian

Re: Проверить есть ли каталог в $PATH

Сообщение diesel »

MMouXe писал(а):
09.06.2008 20:38
Я пишу скрипт для автоматической установки java-программ с использованием скрипта Makeself (самораспаковывающийся архив).
Makeself после распаковки запускает мой скрипт, но в PATH путь не добавляется, а вот когда я запускаю терминал и выполняю скрипт (. script.sh), содержащий экспорт в PATH и вывод содержимого переменной, - все есть и при выводе скриптом содержимого переменной, и при его выводе затем мной. Почему после запуска моего скрипта скриптом Makeself переменная в терминале не сохраняется?
Вывод в файл сделал, так что теперь каталог присутствует всегда, но я хочу чтобы после выполнения скрипта Makeself была доступна прога по пути $HOME/bin сразу, а не после других телодвижений или ручного экспорта.
з.ы. не пинайте сильно, я новичок, подскажите хотя бы куда копать.


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

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

diesel@indie:/tmp$ cat ./var-test.sh
#!/bin/bash

export test_variable="some value"


diesel@indie:/tmp$ echo $test_variable

diesel@indie:/tmp$  . ./var-test.sh
diesel@indie:/tmp$ echo $test_variable
some value


как видите все работает
Спасибо сказали:
MMouXe
Сообщения: 252

Re: Проверить есть ли каталог в $PATH

Сообщение MMouXe »

diesel Как у Вас действительно, проверил, все работает, но у моего скрипта это ничего не меняет :(
В общем вот, тут ман по использованию и сам скрипт http://kalina.lug.ru/e107_plugins/forum/fo...wtopic.php?1244
Спасибо сказали:
Аватара пользователя
diesel
Бывший модератор
Сообщения: 5989
ОС: OS X, openSuSE, ROSA, Debian

Re: Проверить есть ли каталог в $PATH

Сообщение diesel »

MMouXe писал(а):
21.06.2008 17:50
diesel Как у Вас действительно, проверил, все работает, но у моего скрипта это ничего не меняет :(
В общем вот, тут ман по использованию и сам скрипт http://kalina.lug.ru/e107_plugins/forum/fo...wtopic.php?1244

а если:

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

export var_test="this is a test variable";
/bin/bash


то есть запустить новый шелл после того как все что надо будет сделано
в него PATH експортируется
правда что такое makeself и какова роль в этом всем его не совсем понял из описания:)

ЗЫ:

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

       if !(cat "$PROGNAME" > /dev/null 2>&1); then


тоже самое по-сути проверят: 

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

 if [ ! -r $PROGNAME ]; then


Вот тут:

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


                    JARNAME=`find *.jar`
                    ln -s "$JARNAME" "$PROGNAME.jar"

а если несколько jar'ов будет?
Спасибо сказали:
MMouXe
Сообщения: 252

Re: Проверить есть ли каталог в $PATH

Сообщение MMouXe »

правда что такое makeself и какова роль в этом всем его не совсем понял из описания

Если кратко - сжатый самораспаковывающийся архив (дрова для видюх от нвидии с такого ставятся), запускаем его (sh toonel.sfx.run), он распаковывается во временный каталог и запускает (./install.sh) наш скрипт, который дальше производит копирование, ссылки создает и т.п. (устанавлиывает все это дело, т.е. то что обычно я делал вручную при установке java-прог).
а если несколько jar'ов будет?

Вот действительно интересно, тоже думал над этим, бывает ли несколько исполняемых jar-файлов, да и зачем по-идее их может быть несколько? Если да, то будем думать дальше, как с этим бороться, но я пока не встречал больше одного.
то есть запустить новый шелл после того как все что надо будет сделано
в него PATH експортируется

Попробуем
Спасибо сказали:
MMouXe
Сообщения: 252

Re: Проверить есть ли каталог в $PATH

Сообщение MMouXe »

Все сделал, тему можно в трэш.
Спасибо сказали: