Проверить есть ли каталог в $PATH
Модератор: Модераторы разделов
-
MMouXe
- Сообщения: 252
Проверить есть ли каталог в $PATH
В общем нужно написать скрипт на баше, что была проверка переменной $PATH на наличие заданного мной каталога, а то если не проверять, то скрипт автоматом напихает сколько угодно одних и тех же путей.
Другими словами: как произвести поиск в переменной на наличие или отстуствие заданной строки.
з.ы. чувствуется что поиск фразы не сложен, но пока че-то не могу найти ничего вразумительного.
Другими словами: как произвести поиск в переменной на наличие или отстуствие заданной строки.
з.ы. чувствуется что поиск фразы не сложен, но пока че-то не могу найти ничего вразумительного.
-
allez
- Сообщения: 2223
- Статус: Не очень злой админ :-)
- ОС: SuSE, CentOS, FreeBSD, Windows
Re: Проверить есть ли каталог в $PATH
echo $PATH | grep "/my/dir"
-
MMouXe
- Сообщения: 252
Re: Проверить есть ли каталог в $PATH
Как ни странно, но вывод этой команды аналогичен echo $PATH, не происходит отсеивания 
-
allez
- Сообщения: 2223
- Статус: Не очень злой админ :-)
- ОС: SuSE, CentOS, FreeBSD, Windows
Re: Проверить есть ли каталог в $PATH
Это означает, что в значении переменной присутствует ваш каталог. Если бы его там не было, команда возвратила бы пустую строку. В общем, man grep почитайте, пригодится. 
-
MMouXe
- Сообщения: 252
Re: Проверить есть ли каталог в $PATH
allez Действительно, огромное спасибо, а то я еще бы долго думал почему не то получается 
Просто я думал что должно быть именно отсеивание, т.е. как в ls | grep Desktop он выводит мне только каталог десктоп, а тут все выводились, вот это меня и смутило.
Просто я думал что должно быть именно отсеивание, т.е. как в ls | grep Desktop он выводит мне только каталог десктоп, а тут все выводились, вот это меня и смутило.
-
MMouXe
- Сообщения: 252
Re: Проверить есть ли каталог в $PATH
Кстати, вот такой скрипт получился, правда, есть вопрос:
почему данный скрипт не добавляет путь в PATH, он добавляется только вручную, используя команду export PATH="$HOME/bin:$PATH"?
почему данный скрипт не добавляет путь в 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
Этот скрипт изменяет переменную PATH в своем экземпляре оболочки, а не в том, в котором вы работаете. Попробуйте запустить его в своей текущей оболочке оператором "точка" (не забудьте поставить пробел между точкой и именем скрипта):
. /path/to/script.sh
. /path/to/script.sh
-
diesel
- Бывший модератор
- Сообщения: 5989
- ОС: OS X, openSuSE, ROSA, Debian
Re: Проверить есть ли каталог в $PATH
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
Я пишу скрипт для автоматической установки java-программ с использованием скрипта Makeself (самораспаковывающийся архив).
Makeself после распаковки запускает мой скрипт, но в PATH путь не добавляется, а вот когда я запускаю терминал и выполняю скрипт (. script.sh), содержащий экспорт в PATH и вывод содержимого переменной, - все есть и при выводе скриптом содержимого переменной, и при его выводе затем мной. Почему после запуска моего скрипта скриптом Makeself переменная в терминале не сохраняется?
Вывод в файл сделал, так что теперь каталог присутствует всегда, но я хочу чтобы после выполнения скрипта Makeself была доступна прога по пути $HOME/bin сразу, а не после других телодвижений или ручного экспорта.
з.ы. не пинайте сильно, я новичок, подскажите хотя бы куда копать.
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
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
diesel Как у Вас действительно, проверил, все работает, но у моего скрипта это ничего не меняет 
В общем вот, тут ман по использованию и сам скрипт http://kalina.lug.ru/e107_plugins/forum/fo...wtopic.php?1244
В общем вот, тут ман по использованию и сам скрипт http://kalina.lug.ru/e107_plugins/forum/fo...wtopic.php?1244
-
diesel
- Бывший модератор
- Сообщения: 5989
- ОС: OS X, openSuSE, ROSA, Debian
Re: Проверить есть ли каталог в $PATH
MMouXe писал(а): ↑21.06.2008 17:50diesel Как у Вас действительно, проверил, все работает, но у моего скрипта это ничего не меняет
В общем вот, тут ман по использованию и сам скрипт 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
правда что такое makeself и какова роль в этом всем его не совсем понял из описания
Если кратко - сжатый самораспаковывающийся архив (дрова для видюх от нвидии с такого ставятся), запускаем его (sh toonel.sfx.run), он распаковывается во временный каталог и запускает (./install.sh) наш скрипт, который дальше производит копирование, ссылки создает и т.п. (устанавлиывает все это дело, т.е. то что обычно я делал вручную при установке java-прог).
а если несколько jar'ов будет?
Вот действительно интересно, тоже думал над этим, бывает ли несколько исполняемых jar-файлов, да и зачем по-идее их может быть несколько? Если да, то будем думать дальше, как с этим бороться, но я пока не встречал больше одного.
то есть запустить новый шелл после того как все что надо будет сделано
в него PATH експортируется
Попробуем
-
MMouXe
- Сообщения: 252
Re: Проверить есть ли каталог в $PATH
Все сделал, тему можно в трэш.