Вопрос о поведении находки

Я думаю, вы говорите о rlwrap.

rlwrap выполняет указанную команду, перехватывая ввод пользователя, чтобы обеспечить редактирование строк readline, постоянную историю и завершение. rlwrap старается быть полностью прозрачным - вы (или ваша оболочка) не должны заметить никакой разницы между командой command и командой rlwrap - кроме добавленной функциональности readline, конечно. Это должно быть верно даже тогда, когда вы перенаправляете, пересылаете и посылаете сигналы от и к command, или когда command манипулирует настройками своего терминала. rlwrap man page

2
18.01.2019, 13:35
4 ответа
find. -exec./pgm1 \; -o -exec./pgm2 \; -print
       |---expr1-----|    |----expr2------------|

Код выхода pgm1всегда 1 , что означает, что expr1 ложно. Согласно справочной странице findбудет вычислять выражение expr2, которое в данном случае равно pgm2.

Итак, и pgm1, и pgm2были казнены.

2
27.01.2020, 22:02

Ваш тест не демонстрирует различий в приоритетах; попробуй

find. -exec./pgm1 \; -print -o -exec./pgm2 \;

, чтобы увидеть разницу.-a(или ни один оператор )не связывается сильнее, чем -o, поэтому -printсвязан с -exec./pgm1и никогда не вычисляется, поскольку pgm1всегда терпит неудачу.

В вашем примере для каждого найденного файла findзапускает pgm1, который терпит неудачу, в результате чего findоценивает другую ветвь оператора -o, поэтому выполняется pgm2, который завершается успешно, а затем по -print.

2
27.01.2020, 22:02

Таким образом, в основном более высокий приоритет -и не означает, что он выполняется первым, но это означает, что он выполняется последним... То есть «-a связывает больше, чем -o».

-1
27.01.2020, 22:02

Подводя итог еще раз, чтобы посмотреть, получилось ли у меня на этот раз :find всегда оценивает предикаты таким образом, что он разбивает командную строку на две -«левую» и «правую» части. Когда он решает, как его разделить, приоритет оператора берет на себя управление, и строка разделяется на операторе с наименьшим приоритетом. Затем сначала выполняется левая часть, а затем, в конце концов, правая часть. И если каждая часть имеет более двух предикатов, соединенных логическим оператором, она выполняется рекурсивно таким же образом.

0
27.01.2020, 22:02

Теги

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