Добавьте это как первую строку сценария:
[ "$UID" -eq 0 ] || exec sudo bash "$0" "$@"
Изменение sudo
кому: gksu
или gksudo
если Вы предпочитаете графическую подсказку.
Да, выполните следующую команду:
shopt -s nullglob
это аннулирует соответствие, и никакая ошибка не будет инициирована.
~/.bashrc
если Вы хотите обнаружить пустой шарик в оболочке POSIX, попробовать
for i in *.txt; do
[ "$i" = '*.txt' ] && [ ! -e '*.txt' ] && continue
done
В ударе можно использовать shopt -s nullglob
расшириться до пустого массива, при отсутствии соответствий.
В POSIX окружает без nullglob
, можно избежать этой проблемы путем проверки, что имя файла, передаваемое на самом деле, существует при наличии [ -e "$file" ] || [ -L "$file" ] || continue
как первая часть Вашего for
цикл.
[ -e
возвратил бы false для недоступных файлов или файлов, которые являются символьными ссылками на недоступные или несуществующие файлы.
– Stéphane Chazelas
18.11.2012, 21:14
chmod 0 the_file
, [ -e the_file ]
все еще оценивает верный, таким образом, это должно быть что-то еще.
– dubiousjim
18.11.2012, 23:34
mkdir -p x/{a,b} && chmod 444 x && echo x/* && [ -e x/a ]
. x/a недоступен, но поскольку x является читаемым x /* расширится.
– Stéphane Chazelas
19.11.2012, 11:51
Обычная техника для оболочек, которые не имеют a nullglob
опция
set -- [*].type *.type
case $1$2 in
'[*].type*.type') shift 2;;
*) shift
esac
for file do
cmd -- "$file"
done
Дополнительное [*].type
должен покрыть случай, где существует один названный файл *.type
в текущем каталоге.
Теперь, если Вы хотите включать точечные файлы, который становится более сложным.
Я полагаю, что техника была выдумана Laura Fairhead в Usenet несколько лет назад.
find . -name '*.type' -maxdepth 0 -exec somecommand "{}" ";"
Это удаляет for
цикл и globbing оболочки от уравнения полностью. find
выполнится -exec
управляйте однажды на соответствие, и если не будет никаких соответствий, то оно никогда не будет выполняться. -maxdepth 0
сообщает находят для не рекурсивного вызова в подкаталоги именованного параметра пути (.
, в этом случае).
Оборотная сторона - то, что это включает другое приложение, хотя тот, который присутствует в фактически каждой системе Linux там (и вероятно большая часть Unixes также).
*.txt
. Это стоило бы проверить, существует ли файл. сообщение – Chris Down 18.11.2012, 21:17break
вместоcontinue
). – Stéphane Chazelas 19.11.2012, 12:59