LINUX.ORG.RU

Помогите разобраться со скриптом

 ,


0

1
while [ $# -gt 0 ]; do
        case $1 in
                -c)
                        CONFIG_FILE_PATH="$2"
                        shift 2
                        ;;
                *)
                        ${ECHO} "Unknown Option \"$1\"" 1>&2
                        exit 2
                        ;;
        esac
done
 
if [ -z $CONFIG_FILE_PATH ] ; then
        SCRIPTPATH=$(cd ${0%/*} && pwd -P)
        CONFIG_FILE_PATH="${SCRIPTPATH}/pg_backup.config"
fi
 
if [ ! -r ${CONFIG_FILE_PATH} ] ; then
        echo "Could not load config file from ${CONFIG_FILE_PATH}" 1>&2
        exit 1
fi
 
source "${CONFIG_FILE_PATH}"

[ ! -r ${CONFIG_FILE_PATH} ] пишет Could not load config file from /pg_backup.config хотя я запускаю от рута(без параметров), и права вроде бы все есть, в какую сторону смотреть? скрипт отсюда:https://wiki.postgresql.org/wiki/Automated_Backup_on_Linux

В echo $SCRIPTPATH почему-то пусто, не могу понять почему



Последнее исправление: ksen (всего исправлений: 1)

Ответ на: комментарий от ksen

Если ты запускаешь скрипт с аргументами (с ключем -c и путем до конфига), тогда блок кода с проверкой на пустоту $CONFIG_FILE_PATH не выполняется, потому что значение не пустое, а раз SCRIPTPATH устанавливается именно в этом блоке, он остается без значения у тебя.

Yorween
()
Ответ на: комментарий от Yorween

общем, запускал его я так: bash %НазваниеСкрипта, находясь в папке с ним. Он падал с ошибкой «Could not load config file from» (я попадал в этот блок(с проверкой на пустоту), оттуда выводил значение), но значение не заполнялось. Когда же я запустил bash /пустьДоСкрипта/%НазваниеСкрипта Он отработал. Я теперь ничего не понимаю, как это работает?

ksen
() автор топика
Ответ на: комментарий от ksen

Бери ABSG, man bash и начинай разбираться. Прочитай, что такое $0 в скрипте, что за ключ -P у pwd, что такое ${} и какое значение имеет символ % внутри ${}.

Yorween
()
Ответ на: комментарий от ksen

$SCRIPTPATH туда почему-то ничего не попадает.

Команду запуска скрипта в студию!

Подсказка: сравни bash myscript.sh и bash ./myscript.sh

anonymous
()
Ответ на: комментарий от ksen

SCRIPTPATH не задан в самом скрипте, значит он должен быть задан в переменных окружения ещё перед запуском. Соответственно он не находит файла pg_backup.config. Это как раз не сложно обойти. Надо узнать где он лежит и захардкодить вместо этих всех проверок.

А как работает команда source я не знаю. но это можно нагуглить.

Т.е. просто попробуйте заменить вот это вот всё на

source "/путь/до/pg_backup.config"

kirill_rrr ★★★★★
()
Последнее исправление: kirill_rrr (всего исправлений: 2)
Ответ на: комментарий от ksen

Хотя там есть парсинг передаваемых параметров, вдруг без них вообще не будет работать.

shift 2 Вот это убирает первые 2 из строки параметров. Значит есть и другие.

kirill_rrr ★★★★★
()

SCRIPTPATH=$(cd ${0%/*} && pwd -P)

Поймай того, кто это написал и долго бей его ногами. Мало того, что SCRIPTPATH=$(dirname «$0») понятней и короче, так твой вариант ещё и работать не всегда будет.

gremlin_the_red ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.