Доброго времени суток!
Подскажите, плиз, как из скрипта узнать место его расположения?
Например есть скрипт: /home/services/traffic-spy/traffic-spy.sh
Хочется узнать его расположение, т.е. - /home/services/traffic-spy/Использовать $0 невозможно, ввиду того, что скрипт может например запускаться и так: ./traffic-spy.sh, если в данный момент я нахожусь в папке /home/services/traffic-spy/
Утилитка basename тоже совершенно не о том :(.В общем - я искал, честно искал, но найти не смог. Не отправляйте в гугл, пожалуйста.
>[оверквотинг удален]
>Подскажите, плиз, как из скрипта узнать место его расположения?
>Например есть скрипт: /home/services/traffic-spy/traffic-spy.sh
>Хочется узнать его расположение, т.е. - /home/services/traffic-spy/
>
>Использовать $0 невозможно, ввиду того, что скрипт может например запускаться и так:
>./traffic-spy.sh, если в данный момент я нахожусь в папке /home/services/traffic-spy/
>Утилитка basename тоже совершенно не о том :(.
>
>В общем - я искал, честно искал, но найти не смог. Не
>отправляйте в гугл, пожалуйста.воспользоваться командой pwd :)
>Доброго времени суток!
>Подскажите, плиз, как из скрипта узнать место его расположения?
>Например есть скрипт: /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
>[оверквотинг удален]
>>Хочется узнать его расположение, т.е. - /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%%/*}" ].
>[оверквотинг удален]
>>echo $a
>
>Таким образом получается полный путь + название скрипта. Надо получить только путь,
>просто pwd не подходит, потому как в случае, если мы находимся
>в папке /home и запускаем скрипт как service/traffic-spy/traffic-spy.sh то pwd выдасть
>/home. Из этого + $0 можно составить путь, но исходя из
>последнего поста я понял, что есть более элегантное решение.
>
>Уважаемый dev, можете подсказать как получить только путь? А ещё лучше киньте
>линк/ман, где можно прочитать о конструкциях типа [ "${0%%/*}" ].man dirname
man bash :)
>>[ "${0%%/*}" ] && a="`pwd`/${0}" || a="$0"
>>echo $a
>
>Таким образом получается полный путь + название скрипта.
>Уважаемый dev, можете подсказать как получить только путь? А ещё лучше киньте
>линк/ман, где можно прочитать о конструкциях типа [ "${0%%/*}" ].Из пути файла получить имя каталог можно стандартными средствами - dirname, как уже сказали.
О [ "${0%%/*}" ]:
1. Открывающая скобка [ это синоним команды test, которая описана в соотв. мане.
2. Конструкция ${0%%/*} относится к типу write-only - ее можно написать но совершенно не возможно понять, что она делает :) В данном случае она отсекает от $0 все, начиная с первого слеша. Т.е. если у нас путь был абсолютный, то строка останется пустой, что и проверяет test, выполняя то, что стоит после && или то, что после ||.Вкратце: man sh
>[оверквотинг удален]
>Подскажите, плиз, как из скрипта узнать место его расположения?
>Например есть скрипт: /home/services/traffic-spy/traffic-spy.sh
>Хочется узнать его расположение, т.е. - /home/services/traffic-spy/
>
>Использовать $0 невозможно, ввиду того, что скрипт может например запускаться и так:
>./traffic-spy.sh, если в данный момент я нахожусь в папке /home/services/traffic-spy/
>Утилитка basename тоже совершенно не о том :(.
>
>В общем - я искал, честно искал, но найти не смог. Не
>отправляйте в гугл, пожалуйста.В bash есть встроенная переменная $PWD, я думаю это то что вам надо...
>[оверквотинг удален]
>Подскажите, плиз, как из скрипта узнать место его расположения?
>Например есть скрипт: /home/services/traffic-spy/traffic-spy.sh
>Хочется узнать его расположение, т.е. - /home/services/traffic-spy/
>
>Использовать $0 невозможно, ввиду того, что скрипт может например запускаться и так:
>./traffic-spy.sh, если в данный момент я нахожусь в папке /home/services/traffic-spy/
>Утилитка basename тоже совершенно не о том :(.
>
>В общем - я искал, честно искал, но найти не смог. Не
>отправляйте в гугл, пожалуйста.dirname $0