fgrep

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

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

wlad_O
Сообщения: 44

fgrep

Сообщение wlad_O »

Здравствуйте, уважаемые знатоки CLI !

Есть директория /home/user/bin
В ней лежит скрипт с командой типа
command | fgrep -f ./bin/file
и file, где указаны строки для fgrep. Скрипт работает.
Обращаю внимание, что путь к этому файлу указан от
домашней директории /home/user.
Если указать место, где он лежит (./file), то скрипт не работает
или работает, если файл положить в домашнюю директорию, т.е.
/home/user.
Еще раз объясняю ситуевину:
скрипт лежит в /home/user/bin, а файл для себя ищет не там, где лежит,
а в родительской директории.
Может кто-нибудь объяснить, почему?
Если важно знать, что за команда, то это - sensors.
С уважением, Влад
Спасибо сказали:
watashiwa_daredeska
Бывший модератор
Сообщения: 4038
Статус: Искусственный интеллект (pre-alpha)
ОС: Debian GNU/Linux

Re: fgrep

Сообщение watashiwa_daredeska »

Есть такое понятие, как «текущий каталог». Все относительные пути считаются от текущего каталога.

Если Вы находитесь в /home/user и запускаете скрипт ./bin/script.sh, то текущий каталог — /home/user, а не /home/user/bin, где лежит скрипт. Если нужно вычислять путь к файлу относительно положения скрипта, а не текущего каталога, то: $(dirname "$0")/file.txt — ссылается на file.txt в том же каталоге, что и скрипт. Хотя, тут тоже есть некоторые подводные камни. В общем случае, это работает только до первого cd в скрипте (ибо путь к скрипту также может быть относительным, а не абсолютным).
Спасибо сказали:
Аватара пользователя
SLEDopit
Модератор
Сообщения: 4824
Статус: фанат консоли (=
ОС: GNU/Debian, RHEL

Re: fgrep

Сообщение SLEDopit »

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

 $ pwd
~/scripts
 $ echo '#!/bin/bash
> pwd'>test
 $ chmod +x test
 $ ./test
~/scripts
 $ cd ..
 $ scripts/test
~
так понятнее?

зы блин, какие все быстрые =)
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.
Спасибо сказали:
wlad_O
Сообщения: 44

Re: fgrep

Сообщение wlad_O »

Есть такое понятие, как «текущий каталог». Все относительные пути считаются от текущего каталога.

Ну да, правильно. Почему-то я посчитал, что если я прописал этот каталог в $PATH, то программа
будет оттуда и плясать. А ведь запуская ее из ~/ , сам я там и остаюсь!
Тут уместна цитата из Баша:
Основная разница между виндой и линуксом при поиске решения некоторой задачи состоит в том,
что когда находишь решение под винду - понимаешь, что винда тупая, а когда находишь под линукс -
понимаешь, что ты тупой...:)

Всем спасибо!
С уважением, Влад
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: fgrep

Сообщение drBatty »

wlad_O писал(а):
19.12.2009 20:30
что если я прописал этот каталог в $PATH, то программа
будет оттуда и плясать. А ведь запуская ее из ~/ , сам я там и остаюсь!

есть переменная $PWD и команда pwd.
wlad_O писал(а):
19.12.2009 20:30
Основная разница между виндой и линуксом при поиске решения некоторой задачи состоит в том,
что когда находишь решение под винду - понимаешь, что винда тупая, а когда находишь под линукс -
понимаешь, что ты тупой...

можно я подкорректирую?
понимаешь, какой ты был тупой...

;)
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:
Аватара пользователя
sash-kan
Администратор
Сообщения: 13939
Статус: oel ngati kameie
ОС: GNU

Re: fgrep

Сообщение sash-kan »

watashiwa_darede... писал(а):
19.12.2009 16:11
В общем случае, это работает только до первого cd в скрипте

Shell

$ cd $ cat /tmp/0001/test #!/bin/bash dirname $0 cd /tmp dirname $0 $ sh /tmp/0001/test /tmp/0001 /tmp/0001
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
Спасибо сказали:
Аватара пользователя
t.t
Бывший модератор
Сообщения: 7390
Статус: думающий о вечном
ОС: Debian, LMDE

Re: fgrep

Сообщение t.t »

sash-kan писал(а):
23.01.2010 20:17
watashiwa_darede... писал(а):
19.12.2009 16:11
В общем случае, это работает только до первого cd в скрипте

Shell

$ cd $ cat /tmp/0001/test #!/bin/bash dirname $0 cd /tmp dirname $0 $ sh /tmp/0001/test /tmp/0001 /tmp/0001
Ты не обратил внимания на пояснение в скобках:
watashiwa_daredeska писал(а):
19.12.2009 16:11
(ибо путь к скрипту также может быть относительным, а не абсолютным).

Shell

t:~$ cat tmp/test.sh #!/bin/bash ls -ld $(dirname $0) cd /tmp ls -ld $(dirname $0) t:~$ ./tmp/test.sh drwxr-xr-x 9 t t 4096 Янв 25 12:55 ./tmp ls: невозможно получить доступ к ./tmp: Нет такого файла или каталога t:~$
¡иɯʎdʞ ин ʞɐʞ 'ɐнɔɐdʞǝdu qнεиж
Спасибо сказали: