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 и все работает отлично. Еще раз извините за то, что так небрежно.

Другие вопросы по тегам