Программы
Это вам не это! Как утилита find работает с exec

Это вам не это! Как утилита find работает с exec

find, как и многие утилиты Unix, имеет довольно много интересных ключей, которые стоит знать. Но порой это уже на грани "обязан знать"

Часто бывает, что проблему решает один ключ. Один ключ какой-то утилиты, который ищешь пару дней. Он делает "хорошо" в каком-то конкретном редком случае, и ты не ругаешься на него, ведь это реально редкий случай.

Но бывают и иные варианты...

$ find /etc/passwd -exec false \;
$ echo $?
0

Мы ищем файл /etc/passwd, который есть в каждом unix - можете проверить. И при нахождении его исполняем false - сделать неправду / сделать ошибку - в зависимости от контекста.

И, что бы вы думали... Всё нормально! Ошибки нет, переменная кода возврата говорит, что всё ок...

$ find /etc/passwd -exec false '{}' '+'
$ echo $?
1

А при таком синтаксисе уже таки находятся ошибки...

Идём в man и видим:

-exec utility [argument ...] ;
             True if the program named utility returns a zero value as its exit status.  Optional arguments may be passed to the utility.  The expression must be terminated by a semicolon (``;'').  If you invoke find from a shell you may need to quote the semicolon if the shell would otherwise treat it as a control operator.  If the string ``{}'' appears anywhere in the utility name or the arguments it is replaced by the pathname of the current file.  Utility will be executed from the directory from which find was executed. Utility and arguments are not subject to the further expansion of shell patterns and constructs.


-exec utility [argument ...] {} +
             Same as -exec, except that ``{}'' is replaced with as many pathnames as possible for each invocation of utility.  This behaviour is similar to that of xargs(1).

Формулировки прекрасны, никто явно не говорит о красивом профукивании в одном случае $? и его присутствии в другом... Лишь маленькая приписка о похожести на xargs нам может намекнуть.

В данном случае я зол на утилиту. И на документацию. Странно видеть такое в Unix. Ну и отпало желание в будущем использовать exec - в ряде случаев понятнее будет сразу xargs юзать.

Также может быть вам интересно:

Продолжаем эксперимент "Scrum чужими руками"

Как вы может быть помните, более года назад я начал "впихивать" Scrum в нашу разработку. Однако, вместо диктатуры и тупого устанавливания правил, поступил иначе...

Читать »

Руководство Джоэла Спольски по подбору программистов и управлению ими

На днях прочитал книгу Джоэла Спольски (про автора можно почитать в интернетах — весьма весело местами) про подбор программистов и управление ими. Книга 2007-го года, перевод — 2008-го.

Читать »
Фото Так ли безопасен Linux? Несколько коммитов с уязвимосятми в stable

Так ли безопасен Linux? Несколько коммитов с уязвимосятми в stable

Исследователи сумели пройти code-review с реквестами в ядро Linux, заведомо содержащими добавление уязвимостей.

Фото Пример своей консольной команды в Django проекте

Пример своей консольной команды в Django проекте

Если вы работали с Django проектом, то, скорее всего, запускали команды из консоли (manage.py). В Django есть простой способ писать свои команды для управления проектом.

Фото Как на Bash посчитать число строк в проекте (директории)

Как на Bash посчитать число строк в проекте (директории)

Ниже будет представлен однострочник, решающий данную задачу на Bash + пошаговое описание его работы.

Фото И снова sudo, и снова "решето"

И снова sudo, и снова "решето"

В утилите sudo была исправлена очередная уязвимость.

Фото Как установить часовой пояс в Linux

Как установить часовой пояс в Linux

В рамках первичной настройки Операционной Системы важно установить и по какому времени вы живёте, ведь при следующем обновлении времени через Интернет ваше время слетит.

Фото Как найти самые большие папки и файлы в Linux

Как найти самые большие папки и файлы в Linux

Когда кончается место на жестком диске, возникает закономерный вопрос: на что же оно было потрачено, какие файлы разрослись больше положенного?

Фото Команда grep – полезные ключи и примеры использования

Команда grep – полезные ключи и примеры использования

У команды "grep" довольно много различных особенностей. особенно, если учесть, что с английского это "решето" – а что может войти в решето , не факт что выйдет!

Фото Как создать неизменяемый файл в Linux / MacOS / FreeBSD

Как создать неизменяемый файл в Linux / MacOS / FreeBSD

Само собой, root может всё (если введёт пару команд), однако, это вполне легальный способ запретить изменение файла.