可能な限り移植できるように、特定のポートのプロセスを終了するシェルスクリプト(「POSIX」)を作成したいと思います。私はこれを使用できることを知っています。
portpid() { fstat | grep ":$1" | awk '{print $3}' ;}
その後、次のようにポート8080でリッスンしているプロセスを終了できます。
$ kill $(portpid 8080)
しかし、これをonelinerのポートプロセスを終了するプログラムに結合し、このスクリプトを私のコマンドとパスに名前付きエイリアスとして追加するにはどうすればよいですか?
私の考えでは、以下のようになるはずです。
portpid() { fstat | grep ":$1" | awk '{print $3}' ;}
kill $(portpid $1)
これを合わせようとしましたが、うまくいきません。
#!/bin/bash
portpid() { fstat | grep ":$1" | awk '{print $3}' ;}
kill $(portpid $1)
私はコーエンシェルを使用しています。これは私の最初のシェルスクリプトです。
ベストアンサー1
「うまくいきません」という言葉を聞いたり読んだりするのが一般的ですが、ほとんど役に立たない。
korn シェルを使用するのと同じように、 bash(#!/bin/bash ) に shebang を使用します。システムに少なくとも/bin/bashがありますか?この小さなスクリプトでは/bin/kshを使用することもできます。
あなたがすることは次に拡張されます。 (80番に電話してください)
#!/bin/bash
portpid() { fstat | grep ":80" | awk '{print $3}' ;}
kill $(portpid 80)
あなたが望むものではありませんか?
fstat
給餌使用kill
結果
portpid() { fstat | grep ":$1" | awk '{print $3;}' | xargs kill }
ここで xargs は前のコマンドの入力を読み込み、kill を呼び出します。
awk は、以下を使用する代わりに greping を実行できます。
portpid() { fstat | awk '/'$1'/ {print $3;}' | xargs kill }
ポート番号が特定のフィールド(例:7)にある場合は、awk構文を理解しているようです。
portpid() { fstat | awk '$7 ~ /'$1'/ {print $3;}' | xargs kill }