Самый простой способ обойти "Отказ в доступе" по файлу

Чтобы добавить свои собственные предикаты test, необходимо изменить исходные коды bashдля встроенной команды -в [. Это, вероятно, не то, что вы хотите сделать, так как это приведет к безнадежно не -переносимым сценариям. Вместо этого вы можете использовать функцию оболочки:

isemptydir () (
    shopt -s nullglob
    shopt -s dotglob

    if [ -z "$1" ]; then
        echo 'isemptydir: Empty or missing argument' >&2
        return 1

        # could instead do: set.
        # this would use the current directory as the "default" one
    fi

    if [ -d "$1" ]; then
        # note: above test fails on inaccessible dirs --> "not empty"

        set -- "${1%/}"/*
        [ "$#" -eq 0 ]
        # note: above test succeeds on unlistable dirs --> "empty"           
    fi
)

if isemptydir "$mydir"; then
    printf 'Directory "%s" is empty\n' "$mydir"
else
    printf '"%s" is not a directory, or is not empty\n' "$mydir"
fi

Функция проверяет, является ли данный аргумент именем каталога. Если да, то подсчитывается количество имен (, а не только файлов ), доступных в каталоге, включая скрытые имена, и сравнивается с нулем. Статус возврата теста, который выполняется последним, является статусом возврата функции.


Возможно, вы могли бы перегрузить команды [или testсвоими собственными функциями, но это также может вызвать проблемы.

-5
18.03.2020, 10:51
1 ответ

К сожалению, я не могу добавить комментарий, поэтому я должен ответить на него:

Если я правильно понимаю, вы не можете сохранить системный файл -, если он открыт через графический интерфейс. Проще всего это сделать в Терминале. Если вы хотите изменить это в интерактивном режиме, вы можете использовать, например.nano:

sudo nano /etc/update-manager/release-upgrades

Если вы хотите изменить его без какого-либо интерактивного редактора, вы можете использоватьsed:

sudo sed -i 's/^\(Prompt=\).*$/\1normal/' /etc/update-manager/release-upgrades
1
28.04.2021, 23:20

Теги

Похожие вопросы