Проблема (для вас) с $0
состоит в том, что для нее задана любая командная строка, использованная для вызова скрипта, а не местоположение самого скрипта. Это может затруднить получение полного пути к каталогу, содержащему скрипт, который вы получите из %~dp0
в пакетном файле Windows.
Например, рассмотрим следующий скрипт: dollar.sh
:
#!/bin/bash
echo $0
Если вы запустите его, вы получите следующий вывод:
# ./dollar.sh
./dollar.sh
# /tmp/dollar.sh
/tmp/dollar.sh
Таким образом, чтобы получить полное имя каталога скрипта, я делаю следующее:
cd `dirname $0`
SCRIPTDIR=`pwd`
cd -
Это работает следующим образом:
cd
к каталогу скрипта, используя относительный или абсолютный путь из командной строки.
- Получает абсолютный путь к этому каталогу и сохраняет его в
SCRIPTDIR
.
- Возвращается к предыдущему рабочему каталогу, используя "
cd -
".