$0
и операции над строками bash-а. Это то, что в заголовке. Как вариант, его можно использовать в виде:cd ${0%${0##*/}}Исходные данные:
$0
- полный путь запущенного скрипта. Понятно, что скрипт надо выполнять по полному пути, иначе использование метода лишено смысла.Используются последовательно две операции над строками:
${string##substring} - удаление самой длинной, из найденных, подстроки $substring в строке $string. Поиск ведется с начала строки.
${string%substring} - удаление самой короткой, из найденных, подстроки $substring в строке $string. Поиск ведется с конца строки.
${0%${0##*/}}
- самая длинная из найденных строк */
— это весь путь до последнего слеша включительно. Если удалить это из полного пути, то получится просто имя файла самого скрипта (без пути). ${0%${0##*/}}
- далее, если из $0
(«полный путь») удалить «имя файла» (получено выше), то получится как раз «путь без имени файла».