【问题标题】:Using stdout from piped command in nc connection and commands in parentheses在 nc 连接中使用管道命令的标准输出和括号中的命令
【发布时间】:2014-06-14 05:40:05
【问题描述】:

我想知道如何在管道命令中使用 stdout,然后在 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>&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>&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>&1
    ); done

这是正确的吗?如果if 语句不正确,我该如何更改?

【问题讨论】:

    标签: linux bash redirect stdout pipeline


    【解决方案1】:

    如果将&lt;COMMAND&gt; 的输出传递给循环,则可以一次评估一行:

    <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>&1 
          fi
        )        
      fi
    done
    

    【讨论】:

    • 谢谢... :) ... 请看我的更新... 更新也正确吗?
    • 实际上,这只有在&lt;COMMAND&gt;在一行上单独输出IP地址且没有其他文本或标点符号时才有效。
    • 谢谢。我正在检查您的解决方案...为了让其他人知道,请在 grep 命令末尾添加'
    • 对不起。这个解决方案是否只检查每个 ip 一次而不是更多?
    • 每次&lt;COMMAND&gt;输出时都会检查每个ip
    猜你喜欢
    • 2021-04-29
    • 1970-01-01
    • 2021-10-24
    • 1970-01-01
    • 1970-01-01
    • 2017-08-11
    • 2010-12-03
    • 2018-10-09
    • 2020-11-02
    相关资源
    最近更新 更多