Здравствуйте, уважаемые знатоки CLI !
Есть директория /home/user/bin
В ней лежит скрипт с командой типа
command | fgrep -f ./bin/file
и file, где указаны строки для fgrep. Скрипт работает.
Обращаю внимание, что путь к этому файлу указан от
домашней директории /home/user.
Если указать место, где он лежит (./file), то скрипт не работает
или работает, если файл положить в домашнюю директорию, т.е.
/home/user.
Еще раз объясняю ситуевину:
скрипт лежит в /home/user/bin, а файл для себя ищет не там, где лежит,
а в родительской директории.
Может кто-нибудь объяснить, почему?
Если важно знать, что за команда, то это - sensors.
fgrep
Модераторы: /dev/random, Модераторы разделов
-
watashiwa_daredeska
- Бывший модератор
- Сообщения: 4038
- Статус: Искусственный интеллект (pre-alpha)
- ОС: Debian GNU/Linux
Re: fgrep
Есть такое понятие, как «текущий каталог». Все относительные пути считаются от текущего каталога.
Если Вы находитесь в /home/user и запускаете скрипт ./bin/script.sh, то текущий каталог — /home/user, а не /home/user/bin, где лежит скрипт. Если нужно вычислять путь к файлу относительно положения скрипта, а не текущего каталога, то: $(dirname "$0")/file.txt — ссылается на file.txt в том же каталоге, что и скрипт. Хотя, тут тоже есть некоторые подводные камни. В общем случае, это работает только до первого cd в скрипте (ибо путь к скрипту также может быть относительным, а не абсолютным).
Если Вы находитесь в /home/user и запускаете скрипт ./bin/script.sh, то текущий каталог — /home/user, а не /home/user/bin, где лежит скрипт. Если нужно вычислять путь к файлу относительно положения скрипта, а не текущего каталога, то: $(dirname "$0")/file.txt — ссылается на file.txt в том же каталоге, что и скрипт. Хотя, тут тоже есть некоторые подводные камни. В общем случае, это работает только до первого cd в скрипте (ибо путь к скрипту также может быть относительным, а не абсолютным).
Мои розовые очки
-
SLEDopit
- Модератор
- Сообщения: 4824
- Статус: фанат консоли (=
- ОС: GNU/Debian, RHEL
Re: fgrep
Код: Выделить всё
$ 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.
The more you believe you don't do mistakes, the more bugs are in your code.
-
wlad_O
- Сообщения: 44
Re: fgrep
Есть такое понятие, как «текущий каталог». Все относительные пути считаются от текущего каталога.
Ну да, правильно. Почему-то я посчитал, что если я прописал этот каталог в $PATH, то программа
будет оттуда и плясать. А ведь запуская ее из ~/ , сам я там и остаюсь!
Тут уместна цитата из Баша:
Основная разница между виндой и линуксом при поиске решения некоторой задачи состоит в том,
что когда находишь решение под винду - понимаешь, что винда тупая, а когда находишь под линукс -
понимаешь, что ты тупой...
Всем спасибо!
С уважением, Влад
-
drBatty
- Сообщения: 8735
- Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
- ОС: Slackware-current
Re: fgrep
есть переменная $PWD и команда pwd.
можно я подкорректирую?
понимаешь, какой ты был тупой...
-
sash-kan
- Администратор
- Сообщения: 13939
- Статус: oel ngati kameie
- ОС: GNU
Re: fgrep
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
Ты не обратил внимания на пояснение в скобках:sash-kan писал(а): ↑23.01.2010 20:17watashiwa_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нεиж