両方のコマンドを結合します。つまり、最初のコマンドの出力が2番目のコマンドの入力になります。

両方のコマンドを結合します。つまり、最初のコマンドの出力が2番目のコマンドの入力になります。

次の2つのステップを組み合わせたいです。ここで、ステップ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:

次のコマンドは、[ステップ1の出力に]ポートを占有しているPIDを終了します。

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

シェルループを使用してください。grep2つのコマンドを1つにまとめることができます。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 

おすすめ記事