スクリプトを終了せずにbashコマンドを停止する

スクリプトを終了せずにbashコマンドを停止する

そのため、シェルで次のコマンドを実行します。

~/for ip in $(cat ip_list);do mkdir $ip; cd $ip; for vuln in $(snmap http);do nmap --script=$vuln $ip -oN $vuln;done cd ../ ; done

そして、約1日ほど正常に実行されました。ディレクトリを正しく作成してナビゲートします。

しかし、今スクリプトの1つが中断されました...

だから私がしたいのは、CTR + Cなどのコアコマンドを使用して、実行中のスクリプトを終了せずにnmapの繰り返しを終了することです。これにより、最初から開始したりIPリストを変更したりする必要がなくなります。

ベストアンサー1

この回答は Bash 専用です。

これにはトラップを使用できます。これは例示的な例である。ループを続行するにはCtrl+を使用してくださいc。端末を閉じたり、他の端末で終了したりする以外に、スクリプトを停止する方法はありません。

#!/bin/bash

trap ps SIGINT
for i in a b c d;  do
    for j in w x y z; do
        echo ----$i$j------ && ping stackexchange.com -c 10
    done
done
exit

あなたのスクリプトは次のようになります(私がいくつかの改善を含む)。しかし、まだテストされていません。

#!/bin/bash
trap '' SIGINT
for ip in $(cat ip_list); do
    mkdir $ip && cd $ip &&
    for vuln in $(snmap http);do
        nmap --script=$vuln $ip -oN $vuln
    done &&
    cd ..
done

私が導入した変更は、&&エラーが発生する可能性がある論理パスの入力を防ぎます。可能であれば、そのような制限を適用する方が安全です。こう言うと:

mkdir $ip; cd $ip;

ディレクトリを作成できない場合、cdエラーが発生します。

あなたがそう言うとき:

mkdir $ip && cd $ip

何らかの理由でディレクトリが作成されていない場合、cd試行は行われません。mkdir $dirからまでのすべてのcd $dirコマンドcd ..をリンクすると、&&ロジックが明確になり、構造が正しくありません。ディレクトリの使用;と作成に失敗した場合は、そのディレクトリに入ることはできませんが、おそらく..

おすすめ記事