Dpkg-перенастроить в BASH
Недавно я написал скрипт, который перенастраивает все пакеты в системе Debian Stable (7.3). Я использую команду
dpkg-reconfigure -pcritical -a --force
Все работало нормально, но сегодня я сделал некоторые изменения в коде (я не думаю, что они связаны), и теперь я получаю эту ошибку:
Can't exec "dpkg-query": Not a directory at /usr/sbin/dpkg-reconfigure line 98.
Can't exec "dpkg": Not a directory at /usr/sbin/dpkg-reconfigure line 82.
Use of uninitialized value $_ in pattern match (m//) at /usr/sbin/dpkg-reconfigure line 83.
Use of uninitialized value $_ in pattern match (m//) at /usr/sbin/dpkg-reconfigure line 84.
Use of uninitialized value $_ in pattern match (m//) at /usr/sbin/dpkg-reconfigure line 85.
Use of uninitialized value $_ in pattern match (m//) at /usr/sbin/dpkg-reconfigure line 86.
Can't exec "dpkg-query": Not a directory at /usr/sbin/dpkg-reconfigure line 98.
Can't exec "dpkg": Not a directory at /usr/sbin/dpkg-reconfigure line 82.
Use of uninitialized value $_ in pattern match (m//) at /usr/sbin/dpkg-reconfigure line 83.
Use of uninitialized value $_ in pattern match (m//) at /usr/sbin/dpkg-reconfigure line 84.
Use of uninitialized value $_ in pattern match (m//) at /usr/sbin/dpkg-reconfigure line 85.
Use of uninitialized value $_ in pattern match (m//) at /usr/sbin/dpkg-reconfigure line 86.
Can't exec "dpkg-query": Not a directory at /usr/sbin/dpkg-reconfigure line 98.
Can't exec "dpkg-query": Not a directory at /usr/sbin/dpkg-reconfigure line 202.
readline() on closed filehandle QUERY at /usr/sbin/dpkg-reconfigure line 204.
Тысячи строк заполнены похожими строками (это последние). Система работает на уровне выполнения 1 - однопользовательском - и от имени пользователя root. И еще одна интересная вещь: код выхода dpkg по-прежнему равен 0.
Спасибо за вашу помощь заранее.
РЕДАКТИРОВАТЬ: вот сценарий
#!/bin/bash
DPKG_RECONFIG_PATH=/usr/sbin/dpkg-reconfigure
# Function for checking critical executables (exits on error)
chk_crit ()
{
TARGET=$1
PATH=$2
if [ -e $PATH ] # Pass 1 - checking existence
then printf "$TARGET exists\n"
else
printf "$TARGET doesn't exist!\n"
exit
fi
if [ -x $PATH ] # Pass 2 - checking execution permissions
then
printf "$TARGET is executable\n"
else
printf "$TARGET is not executable, attempting chmod!\n"
chmod 755 $TARGET_PATH
CHMOD_EXIT=$?
if [ $CHMOD_EXIT = 0 ] # Checking if chmod has succeeded
then
printf "chmod succeeded\n"
else
printf "chmod failed, $TARGET is unusable!\n"
exit
fi
fi
}
chk_crit dpkg-reconfigure $DPKG_RECONFIG_PATH
# Reconfiguring all packages, only asking critical questions
$DPKG_RECONFIG_PATH -pcritical -a --force
DPKG_EXIT=$?
if [ $DPKG_EXIT = 0 ]
then printf "Reconfiguration succeeded\n"
else printf "Reconfiguration failed\n"
exit $DPKG_EXIT
fi
exit
1 ответ
Ну, извините за вопрос, так как это была абсолютно моя ошибка. Спасибо всем, кто помог мне распознать ошибку.
Скрипт не работал, так как я случайно использовал $PATH
как имя для одной из моих пользовательских переменных. Это сбрасывает реальный $PATH
и помешал dpkg выполнить правильно. Теперь я исправил это $TARGET_PATH
и все работает отлично. Еще раз извините за то, что так небрежно.