- 1
- 2
- 3
find /etc/* -maxdepth 0 | while read -r path; do
...
done
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
0
find /etc/* -maxdepth 0 | while read -r path; do
...
done
Кстати, нахуя так было сделано? Что мешало вернуть пустой список, как и ожидалось?
Чтобы сообщения об ошибках были интуитивнее
При cat *.txt в случае пустого раскрытия cat начнёт читать из терминала и юзер подумает, что cat завис, а при раскрытии со звёздочкой он сам напишет, что *.txt файлов нет.
Однако в ряде случаев куда удобнее, чтоб выдавалась ошибка:
Но ведь в аргументах find тоже /etc/* со звездой, который раскрывается шеллом до вызова find. Ошибка же точно такая же будет.
Неа, там 99.9% софта даже не пытается паттерны раскрывать... Просто воспринимают как файл со звездой в имени.
Если хочешь чтобы find сам обрабатывал: find -name "*.mp4"
BTW, find также проходится по ".скрытым" файлам, а glob такого не умеет (без соотв. setopt).
> а glob такого не умеет (без соотв. setopt)
Во-первых, «shopt» (а точнее shopt -s dotglob), а не «setopt». А во-вторых, умеет разумеется:
(Да, тупая конкатенация, но прекрасно работает.)
У программ, следующим стандартам ГНУ, можно и нужно использовать маркер конца ключей «--»:
а в случае, когда подстановка — имя файла, можно дописать точкой текущий каталог:
А если и «--» не умеет, и речь не об имени файла — что ж, только санировать ввод.
> У программ
> А если
Вот поэтому я и говорю, юзать баш для чего-то серьёзного - себе дороже. Не так он и прост, как кажется.
О, вот щастливчик, который таки собрал libastral.so.1 🙂
Ну а против такой конструкции, конечно не попрёшь с монструозным find'ом, разве что для профилактики стоило бы еще shopt -s nullglob
Да и кстати, с find | read нету проблемы с именами файлов, которые содержат пробел.
http://i.imgur.com/RtMa3t9.png