Использование стандартного вывода из передаваемой команды в соединении с nc и команд в круглых скобках

#linux #bash #redirect #stdout #pipeline

#linux #bash #перенаправление #стандартный вывод #конвейер

Вопрос:

Я хочу знать, как я могу использовать стандартный вывод из конвейерной команды, а затем использовать его в соединении с nc:

 <COMMAND> | 
grep -oE '((1?[0-9][0-9]?|2[0-4][0-9]|25[0-5]).){3}(1?[0-9][0-9]?|2[0-4][0-9]|25[0-5])' | 
(echo "exit" | nc <IP-HERE> 23 -w 5 
if [ "$?" -eq "0" ]; then
(
<SomeCommandsHERE>
) | nc <IP-HERE> 23 1>>$file 2>amp;1 )
  

Вопросы:

1) Как я могу использовать результат grep command для моей nc команды в этом потоке?

2) Могу ли я сказать, что результатом grep этого является то, что ip-адрес будет использоваться только во всем следующем утверждении, как то, что я сделал здесь?

 (echo "exit" | nc <IP-HERE> 23 -w 5 
    if [ "$?" -eq "0" ]; then
    (
    <SomeCommandsHERE>
    ) | nc <IP-HERE> 23 1>>$file 2>amp;1 )
  

Обновить

Что я пробовал до сих пор:

 <COMMAND> | 
grep -oE '((1?[0-9][0-9]?|2[0-4][0-9]|25[0-5]).){3}(1?[0-9][0-9]?|2[0-4][0-9]|25[0-5])' | 
while read ip; do
    ( echo "exit" | nc "$ip" 23 -w 5
    [[ "$?" -eq "0" ]]
        (
            echo "hello"
        ) | nc "$ip" 23 1>>$file 2>amp;1
    ); done
  

Правильно ли это? Как я могу изменить if оператор, если он не является правильным?

Ответ №1:

Если вы передаете вывод <COMMAND> в цикл, вы можете оценивать его по одной строке за раз:

 <COMMAND> | while read text; do
  ipaddr=`echo $text | grep -oE '((1?[0-9][0-9]?|2[0-4][0-9]|25[0-5]).){3}(1?[0-9][0-9]?|2[0-4][0-9]|25[0-5])'`
  if [ $? -eq 0 ]; then
    (echo "exit" | nc $ipaddr 23 -w 5 
      if [ $? -eq 0 ]; then
       (
         <SomeCommandsHERE>
       ) | nc $ipaddr 23 1>>$file 2>amp;1 
      fi
    )        
  fi
done
  

Комментарии:

1. Спасибо … 🙂 … пожалуйста, посмотрите мое обновление… Корректно ли обновление?

2. на самом деле, это будет работать только в том случае, если <COMMAND> выводит IP-адрес в отдельной строке без другого текста или знаков препинания.

3. Спасибо. Я проверяю ваше решение … чтобы сообщить другим ребятам, пожалуйста, добавьте ' в конце команды grep

4. Простите меня. Проверяет ли это решение каждый IP-адрес только один раз, не более?

5. он будет проверять каждый IP-адрес каждый раз <COMMAND> , когда выводит его