次の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
シェルループを使用してください。grep
2つのコマンドを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