2016-04-23 4 views
0

In meinem Bash-Skript muss ich einen Befehl (aircrack-ng) starten, um die Ausgabe in einem var für die spätere Verwendung wiederherzustellen. Das Ziel besteht darin, die Ausgabe einer .cap Datei zu analysieren, um zu wissen, ob es irgendwelche Daten gibt (Handshake für WPA-Netzwerke).Ist es möglich, einen Befehl zu stoppen, der bei einem Lese- oder Prompt-Befehl angehalten wurde?

Das Problem ist, dass dieser Befehl manchmal (abhängig von der zu analysierenden Datei) den Benutzer nicht mehr auffordert, eine Option auszuwählen. Wenn die Datei nur Daten von einem Netzwerk enthält, hört sie nicht auf. Wenn die Datei andere Netzwerkdaten enthält, wird sie beendet.

Ich habe bereits die Ausgabe des Befehls analysiert, aber das Problem ist das Skript stoppt. Ich würde den Befehl sofort nach dem Start beenden und die Ausgabe in die Variable wiederhergestellt und möchte nicht, dass das Skript stoppt.

Ich habe versucht, es mit & am Ende zu starten, um im Hintergrund zu laufen und dann es zu töten, aber es stoppt trotzdem.

nets_from_file=$(aircrack-ng /path/to/somefile.cap 2> /dev/null | egrep "WPA \(1" | awk '{ saved = $1; $1 = ""; print substr($0, 2) }' &) 

kill -9 $(ps aux | grep aircrack-ng | grep -v "grep" | awk '{print$2}') > /dev/null 2>&1 

Gibt es eine Möglichkeit, den ersten Befehl zu starten, was einen Stopp verursacht, die Ausgabe wiederherzustellen und den Befehl zu beenden, ohne Skript zu stoppen?

+1

Sie könnten die Eingabe des Befehls in '/ dev/null' umleiten. Dann wird es eine sofortige EOF bekommen, wenn es versucht, eine Antwort vom Benutzer zu bekommen. Oder Sie können den 'yes' Befehl pipen, um Antworten darauf zu füttern. – Barmar

+0

Ich habe versucht, aber wenn ich>/dev/null auf Aircrack-ng-Befehl gesetzt habe, verlor ich die Ausgabe, was ich in eine Var fangen will. :/ – OscarAkaElvis

+0

Das ist die Umleitung der Ausgabe, ich sagte, um die ** Eingabe ** umzuleiten. Das ist ' Barmar

Antwort

0

woow ... Ich habe es gefunden! erstaunlich einfach nach einem kopfschmerz ...

nets_from_file=$(echo "1" | aircrack-ng /path/to/somefile.cap 2> /dev/null | egrep "WPA \(0" | awk '{ saved = $1; $1 = ""; print substr($0, 2) }') 

ein einfaches echo vor mit pfeife hat den trick! :)

Verwandte Themen