Shell Script: Keine Ausgabe

geforceeee

PC-Selbstbauer(in)
Hallo zusammen,

ich habe ein kleines Shell-Script, das mittels Brute-Force eine Binary von mir auführt. Diese Binary gibt einen String zurück. Nun soll die Schleife so lange laufen, bis ein anderer String ausgegeben wird. Aus irgendeinem Grund wird aber die ganze Zeit eine Ausgabe im Terminal gemacht, die die Geschwindigkeit erheblich mindert. Was mache ich falsch?

Code:
for i in {1..999999} 
do
 
str=$(./prime $i)
if [ "$str" != "xxx" ];
then
        echo "no"
else    
        echo "yes"
fi      
done

echo "Kein Erfolg"

1.) Aus irgendeinem Grund wird in jedem Schleifendurchlauf "str" ausgegben. Warum?
2.) Die if Abfrage wertet immer zu true aus, obwohl str den String "xxx" enthalten muss. prime gibt nämlich einfach nur xxx zurück

Kann mir jemand helfen?

Vielen Dank
geforceeee
 
Zuletzt bearbeitet:
Bist Du sicher, dass der prime-Befehl das "xxx" auf stdout ausgibt ? Könnte auch stderr sein, den Unterschied siehst Du nicht im Terminal. Versuchs mal so:
Code:
str=$(./prime $i 2>&1)
EDIT: Außerdem muss sich der prime-Befehl im aktuellen Verzeichnis befinden (./prime), ansonsten bei prime im Suchpfad nur prime ohne "./" verwenden.
 
Zuletzt bearbeitet:
Hey mattinator!

Daran hat es tatsächlich gelegen. Dass dies der Grund ist, wäre mir niemals eingefallen.

Kannst Du mir erklären, warum gerade 1>2& die Lösung ist? Warum bedeutet dies, dass auf auf stderr geachtet werden soll?

Vielen Dank
geforceeee
 
2>&1 lenkt die Standard-Fehlerausgabe auf die Standard-Ausgabe um. Geht auch umgekehrt: 1>&2. Linux-Konsolen-Programme geben meistens Fehler auf stderr aus und andere Meldungen auf stdout. Z.b. zur Fehleranalyse von umfangreichen Shell-Scripten ist es nützlich, beide Ausgabe-Streams miteinander zu verknüpfen, um die problematische Stelle im Script schneller zu finden. Eine andere Nutzung der Verknüpfung sind z.B. in Cron-Jobs, wenn man (root) alle Ausgaben komplett als Benachrichtigung erhalten will.
 
Zurück