5

私が書こうとしているより大きなスクリプトの基礎として、私は基本的に bash で基本的な netcat クライアントを実装しようとしています。私の現在のスクリプトは技術的に機能します。次のようになります。

#!/bin/bash

exec 3<>/dev/tcp/$1/$2         

cat <&3 &                      
cat <&1 >3

問題は、強制終了する必要があるぶら下がっている猫のプロセスが残ることですが、それを自動的に行う方法がpkill catわかりません。また、手動で実行するのはあまりスポーツ的ではないようです。

4

2 に答える 2

7

私はジェレミーの答えを正しいものとして受け入れましたが、興味のある人のために、最終的に完成した完全なスクリプトを次に示します。

#!/bin/bash

exec 3<>/dev/tcp/$1/$2         

control_c()
{
    kill $CAT_PID
    exit $?
}

trap control_c SIGINT

cat <&3 &                      
CAT_PID=$!
cat >&3
于 2012-08-27T19:21:38.277 に答える
4

これは恐ろしいクラッジですが、サブシェルを生成して次のようにすることもできます:

CAT1_PID=$$
echo CAT1_PID > /tmp/CAT1_PID
exec cat <&3 &

もちろん、このスクリプトの複数のコピーが実行されている場合は、競合状態に陥ります。

シェルによっては、何らかの形式の exec を呼び出して、PS リストで cat を「名前変更」できる場合があります。その後、次のことができます

pkill the_cat_that_ate_the_network
于 2012-08-25T00:01:01.940 に答える