The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"Маленький вопрос про Bash."
Вариант для распечатки  
Пред. тема | След. тема 
Форумы OpenNET: Виртуальная конференция (Public)
Изначальное сообщение [Проследить за развитием треда]

"Маленький вопрос про Bash."  
Сообщение от stakado email(ok) on 01-Ноя-07, 12:41 
Доброго времени суток!
Подскажите, плиз, как из скрипта узнать место его расположения?
Например есть скрипт: /home/services/traffic-spy/traffic-spy.sh
Хочется узнать его расположение, т.е. - /home/services/traffic-spy/

Использовать $0 невозможно, ввиду того, что скрипт может например запускаться и так: ./traffic-spy.sh, если в данный момент я нахожусь в папке /home/services/traffic-spy/
Утилитка basename тоже совершенно не о том :(.

В общем - я искал, честно искал, но найти не смог. Не отправляйте в гугл, пожалуйста.

Высказать мнение | Ответить | Правка | Cообщить модератору

 Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "Маленький вопрос про Bash."  
Сообщение от mezantrop (??) on 01-Ноя-07, 13:07 
>[оверквотинг удален]
>Подскажите, плиз, как из скрипта узнать место его расположения?
>Например есть скрипт: /home/services/traffic-spy/traffic-spy.sh
>Хочется узнать его расположение, т.е. - /home/services/traffic-spy/
>
>Использовать $0 невозможно, ввиду того, что скрипт может например запускаться и так:
>./traffic-spy.sh, если в данный момент я нахожусь в папке /home/services/traffic-spy/
>Утилитка basename тоже совершенно не о том :(.
>
>В общем - я искал, честно искал, но найти не смог. Не
>отправляйте в гугл, пожалуйста.

воспользоваться командой pwd :)

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

2. "Маленький вопрос про Bash."  
Сообщение от dev email(??) on 01-Ноя-07, 13:55 
>Доброго времени суток!
>Подскажите, плиз, как из скрипта узнать место его расположения?
>Например есть скрипт: /home/services/traffic-spy/traffic-spy.sh
>Хочется узнать его расположение, т.е. - /home/services/traffic-spy/
>
>Использовать $0 невозможно, ввиду того, что скрипт может например запускаться и так:
>./traffic-spy.sh, если в данный момент я нахожусь в папке /home/services/traffic-spy/
>Утилитка basename тоже совершенно не о том :(.

А так?

[ "${0%%/*}" ] && a="`pwd`/${0}" || a="$0"
echo $a

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

3. "Маленький вопрос про Bash."  
Сообщение от stakado email(ok) on 01-Ноя-07, 15:47 
>[оверквотинг удален]
>>Хочется узнать его расположение, т.е. - /home/services/traffic-spy/
>>
>>Использовать $0 невозможно, ввиду того, что скрипт может например запускаться и так:
>>./traffic-spy.sh, если в данный момент я нахожусь в папке /home/services/traffic-spy/
>>Утилитка basename тоже совершенно не о том :(.
>
>А так?
>
>[ "${0%%/*}" ] && a="`pwd`/${0}" || a="$0"
>echo $a

Таким образом получается полный путь + название скрипта. Надо получить только путь, просто pwd не подходит, потому как в случае, если мы находимся в папке /home и запускаем скрипт как service/traffic-spy/traffic-spy.sh то pwd выдасть /home. Из этого + $0 можно составить путь, но исходя из последнего поста я понял, что есть более элегантное решение.

Уважаемый dev, можете подсказать как получить только путь? А ещё лучше киньте линк/ман, где можно прочитать о конструкциях типа [ "${0%%/*}" ].

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

4. "Маленький вопрос про Bash."  
Сообщение от newser (ok) on 01-Ноя-07, 15:50 
>[оверквотинг удален]
>>echo $a
>
>Таким образом получается полный путь + название скрипта. Надо получить только путь,
>просто pwd не подходит, потому как в случае, если мы находимся
>в папке /home и запускаем скрипт как service/traffic-spy/traffic-spy.sh то pwd выдасть
>/home. Из этого + $0 можно составить путь, но исходя из
>последнего поста я понял, что есть более элегантное решение.
>
>Уважаемый dev, можете подсказать как получить только путь? А ещё лучше киньте
>линк/ман, где можно прочитать о конструкциях типа [ "${0%%/*}" ].

man dirname
man bash :)

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

5. "Маленький вопрос про Bash."  
Сообщение от dev email(??) on 01-Ноя-07, 16:19 
>>[ "${0%%/*}" ] && a="`pwd`/${0}" || a="$0"
>>echo $a
>
>Таким образом получается полный путь + название скрипта.
>Уважаемый dev, можете подсказать как получить только путь? А ещё лучше киньте
>линк/ман, где можно прочитать о конструкциях типа [ "${0%%/*}" ].

Из пути файла получить имя каталог можно стандартными средствами - dirname, как уже сказали.

О [ "${0%%/*}" ]:
1. Открывающая скобка [ это синоним команды test, которая описана в соотв. мане.
2. Конструкция ${0%%/*} относится к типу write-only - ее можно написать но совершенно не возможно понять, что она делает :) В данном случае она отсекает от $0 все, начиная с первого слеша. Т.е. если у нас путь был абсолютный, то строка останется пустой, что и проверяет test, выполняя то, что стоит после && или то, что после ||.

Вкратце: man sh

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

6. "Маленький вопрос про Bash."  
Сообщение от all (??) on 01-Ноя-07, 16:45 
>[оверквотинг удален]
>Подскажите, плиз, как из скрипта узнать место его расположения?
>Например есть скрипт: /home/services/traffic-spy/traffic-spy.sh
>Хочется узнать его расположение, т.е. - /home/services/traffic-spy/
>
>Использовать $0 невозможно, ввиду того, что скрипт может например запускаться и так:
>./traffic-spy.sh, если в данный момент я нахожусь в папке /home/services/traffic-spy/
>Утилитка basename тоже совершенно не о том :(.
>
>В общем - я искал, честно искал, но найти не смог. Не
>отправляйте в гугл, пожалуйста.

В bash есть встроенная переменная $PWD, я думаю это то что вам надо...

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

7. "Маленький вопрос про Bash."  
Сообщение от bANAn on 02-Ноя-07, 04:16 
>[оверквотинг удален]
>Подскажите, плиз, как из скрипта узнать место его расположения?
>Например есть скрипт: /home/services/traffic-spy/traffic-spy.sh
>Хочется узнать его расположение, т.е. - /home/services/traffic-spy/
>
>Использовать $0 невозможно, ввиду того, что скрипт может например запускаться и так:
>./traffic-spy.sh, если в данный момент я нахожусь в папке /home/services/traffic-spy/
>Утилитка basename тоже совершенно не о том :(.
>
>В общем - я искал, честно искал, но найти не смог. Не
>отправляйте в гугл, пожалуйста.

dirname $0

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

Архив | Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Оцените тред (1=ужас, 5=супер)? [ 1 | 2 | 3 | 4 | 5 ] [Рекомендовать для помещения в FAQ]




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру