Чтобы добавить свои собственные предикаты 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
своими собственными функциями, но это также может вызвать проблемы.
К сожалению, я не могу добавить комментарий, поэтому я должен ответить на него:
Если я правильно понимаю, вы не можете сохранить системный файл -, если он открыт через графический интерфейс. Проще всего это сделать в Терминале. Если вы хотите изменить это в интерактивном режиме, вы можете использовать, например.nano
:
sudo nano /etc/update-manager/release-upgrades
Если вы хотите изменить его без какого-либо интерактивного редактора, вы можете использоватьsed
:
sudo sed -i 's/^\(Prompt=\).*$/\1normal/' /etc/update-manager/release-upgrades