스크립트를 종료하지 않고 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

그리고 약 하루 정도 정상적으로 실행되었습니다. 디렉토리를 올바르게 생성하고 탐색합니다.

그러나 이제 스크립트 중 하나가 중단되었습니다...

그래서 제가 하고 싶은 것은 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 ..연결 하면 &&논리가 명확해지고 구조가 잘못되지 않습니다. 디렉토리를 사용 ;하고 생성하는 데 실패하면 해당 디렉토리에 들어갈 수 없지만 아마도 ...

답변2

제가 게시한 후 답변한 것을 알고 있지만 다른 사람이 이 문제에 직면할 경우를 대비해 이 답변을 유지하고 싶었습니다.

내가 한 일은 다른 쉘에서 실행한 ps -a다음 nmap 프로세스를 찾아 kill proc-id. 스크립트는 다음 반복으로 계속됩니다.

관련 정보