Пользовательская команда wget без ответа

Обоснование , приведенное в спецификации 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 {} + тоже было бы значительно сложнее.

0
28.02.2014, 19:16
1 ответ

Вы можете использовать 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'

1
28.01.2020, 02:52

Теги

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