Bash - jak przerwać wykonywaną komendę


(jakubgross) #1

Cześć,

 

wie ktoś, może ktośśś jak w Bash'u zatrzymać komendę w pętli?

Np. ping (strona)

Takie komendy jak te ciągną się w nieskonczoność. Aby je zatrzymać normalnie kilka się Ctrl + Z , a jak zatrzymać w skrypcie? Break nie działa, widocznie działa tylko w pętlach.

 

Z góry dzięki za pomoc i pozdrawiam,

jakubgross


(Drobok) #2

ctrl+c


(jakubgross) #3

Ten skrót mam wpisać do mojego kodu?

Nie działa.


(bachus) #4

 

Nie rozumiem do końca… Pierwsza opcja, to wysyłasz tego pinga w tło i się nie przejmujesz nim. Druga opcja to wysyłasz np. cztery pingi

ping -t 4 8.8.8.8


(jakubgross) #5

Tak, ale chodzi mi o inne polecenia, których nie można wykonać ileś razy np. taki kod:

ping google.com
(co ma być, aby anulować)
sleep 2
ping facebook.com

(enedil) #6

http://stackoverflow.com/questions/6196321/echo-control-c-character


(jakubgross) #7

echo ^c nie działa.


(bachus) #8

 

No to pokaż fragment kodu.


(enedil) #9

Nic dziwnego…

 

Nie przeczytałeś odpowiedzi.


(nintyfan) #10

Po uruchomieniu komendy(następna linia)

Zmienna=$!

 

Oczywiście komendę uruchamiasz w tle, np.:

ping 8.8.8.8 &

 

Do zakończenia komendy używasz:

kill $Zmienna

(jakubgross) #11

Ok, sprawdzę i dam znać.


(Barmazu) #12

Ping ma taką opcję, -c (count), -w (wait) - dlaczego nie chcesz ich użyć?

Nie lepiej uruchmić w pętli: ping -c 3 -w 0.3 <adres> (trzy pingi w 1 sekunde) i sprawdzić kod wyjścia i/lub sparsować wyjście? Przynajmniej coś z tego będziesz miał (<adres> żyje lub nie)

Jaki jest sens uruchamiać ping i go zabijać?

LIST="google.com wp.pl onet.pl qwedccc.com"
for IP in ${LIST}
do
  ping -c 3 -w 0.3 ${IP} >/dev/null 2>&1
  if [[$? -ne 0]]
  then
      echo "Adres ${IP} nie odpowiada"
  else
      echo "Adres ${IP} odpowiada"
  fi
done

(jakubgross) #13

Bo to nie chodzi o ping, tylko o komendę, która nie ma takich opcji jak ping, ale i tak już działa sposób @3xUP.