Parar o comando bash sem matar o script

1

Então eu tenho o seguinte comando executando a partir do shell

~/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

e está funcionando bem por cerca de um dia. Está criando diretórios corretamente e navegando por eles.

NO ENTANTO, um dos scripts está pendurado agora ...

Então, o que eu gostaria de fazer é usar um comando de chave similar ao CTR + C, que matará essa iteração do nmap, mas não sairá do script em execução. Dessa forma eu não tenho que começar tudo de novo ou modificar minha lista de ips.

    
por Anthony Russell 30.11.2016 / 18:10

2 respostas

1

Sei que postei e respondi, mas queria preservar essa resposta caso alguém mais encontrasse esse problema.

O que eu fiz foi de outro shell, corri ps -a , depois encontrei meu processo nmap e o matei com kill proc-id . O roteiro continuou até a próxima iteração.

    
por 30.11.2016 / 18:11
1

Esta resposta é para o Bash.

Você pode usar uma armadilha para isso. Este é um exemplo ilustrativo. Para continuar no loop, use Ctrl + c . Não há como parar o script, além de fechar o terminal ou matá-lo de outro terminal.

#!/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

Seu script será parecido com este (depois de algumas das minhas melhorias), mas observe que ele não foi testado:

#!/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

As alterações que introduzi como && impedem a inserção de caminhos lógicos que podem levar a erros. Se possível, é mais seguro impor tais conflitos. Quando é colocado assim:

mkdir $ip; cd $ip;

se o diretório não puder ser criado, então cd leva ao erro.

Quando você coloca desta forma:

mkdir $ip && cd $ip

se o diretório não tiver sido criado por algum motivo, não será tentada nenhuma cd . Quando você mantém todos os comandos de mkdir $dir a cd $dir a cd .. encadeados com && , a lógica é clara e a estrutura não dará errado. Quando você usa ; e falha ao criar o diretório, não é possível inseri-lo, mas possivelmente não será possível alterar para .. .

    
por 30.11.2016 / 20:51