Обоснование , приведенное в спецификации POSIX:
" -exec ... {} +"
синтаксис принят в результате интерпретации 1003.2 #210 интерпретацией IEEE PASC. Следует отметить, что это несовместимое изменение со стандартом ISO/IEC 9899:1999. Например, следующая команда печатает все файлы с'-'
после их имени, если они являются обычными файлами, и с'+'
иначе:find / -type f -exec echo {} - ';' -o -exec echo {} + ';'
Изменение делает недействительным такое использование. Несмотря на то, что предыдущий стандарт заявлял, что такое использование будет работать, на практике многие его не поддерживали, и разработчики стандарта почувствовали, что теперь лучше заявить, что это недопустимо.
Интерпретация PASC 1003.2 #210 углубляется в историю -exec ... {}. +
. Он существовал на нескольких Unix-системах до того, как был принят на POSIX; по сообщению о дефекте он восходит к SVR4 (где он был в основном недокументирован). Сообщение о дефекте оправдывает несовместимое изменение тем, что оно мало влияет на практику:
Обратите внимание, что "+" считается особым только в том случае, если оно незамедлительно следует за "{}". Это минимизирует вероятность возникновения проблем с существующее использование "+" в качестве аргумента с "-exec".
Хотя добавлена поддержка для -exec ... {} +
нарушил бы некоторые соответствующие приложения, как в примере выше, их меньше, чем если бы -exec ... {} ... +
было бы разрешено.
Другая причина, возможно, ограничивающая {}
быть последним аргументом - это простота реализации. Если бы {}
было разрешено использовать -exec
в любом месте списка аргументов, программа find
должна была бы собрать командную строку, скопировав статические аргументы, затем переменную часть, затем другую статическую часть. Это усложнит построение списка аргументов и учет ограничения на размер. Сложность минимальна, но реализаторы любят срезать углы. Поддерживая несколько заменяемых экземпляров {}
(если -exec {} foo +
должен работать, то логически можно ожидать, что -exec {} foo {} +
тоже было бы значительно сложнее.
Вы можете использовать netcat для этой задачи; например, используя ncat
воплощение Nmap:
$ echo -e "GET /?s=1 HTTP/1.0\r\nHost: 192.168.1.10\r\n\r\n" | ncat 192.168.1.177
Это при условии, что ваша Arduino слушает порт 80; в противном случае вам нужно будет указать его после IP-адреса в вызове ncat
После этого, если это работает нормально для вас, вы можете сделать псевдоним со всей этой командой, например, добавив это в ~/. bashrc
, ~/.bash_aliases
или как вам будет удобно:
alias light_on='echo -e "GET /?s=1 HTTP/1.0\r\nHost: 192.168.1.10\r\n\r\n" | ncat 192.168.1.177'