将两个命令合并,即第一个命令的输出作为第二个命令的输入

将两个命令合并,即第一个命令的输出作为第二个命令的输入

我希望合并以下两个步骤,其中步骤 1 的输出(即 PORTS)应作为步骤 2 的输入。

步骤1:

下面的命令从文件中获取端口号。

genpwdfile dec -in test/test.cfg -out /tmp/dec.out |grep PORT_NUM /tmp/dec.out | cut -d '=' -f2 ; grep MONITOR_PORT /tmp/dec.out  | cut -d '=' -f2

输出:

33027
13041

第2步:

以下命令杀死占用端口的 PID [作为步骤 1 的输出]。

lsof -i:33027 2>/dev/null | grep -v PID | awk '{print $2}' | xargs kill -9 

lsof -i:13041 2>/dev/null | grep -v PID | awk '{print $2}' | xargs kill -9 

样本/tmp/dec.out

Test_DIR=/tmp
PORT_NUM=33027
TEST_PORT_WORK=7777
MONITOR_PORT=13041

我正在处理 AiX 6.1 系统

你能建议一下吗?

答案1

只需使用 shell 循环即可。您可以将两个grep命令合并为一个命令,genpwdfile如果创建文件,则通过管道传输是没有意义的。尝试这个:

genpwdfile dec -in test/test.cfg -out /tmp/dec.out &&
    grep -E 'PORT_NUM|MONITOR_PORT' /tmp/dec.out | cut -d '=' -f2 |
        while read -r port; do
            lsof -i:"$port" 2>/dev/null | 
                awk 'NR>1{print $2}' 
        done | xargs kill -9 

相关内容