bigredeyes Geschrieben 23. Januar 2008 Geschrieben 23. Januar 2008 hallo! ich habe mir zum spass ein kleines script geschrieben, welches mein ubuntu nen neuen kernel verpasst. jetzt sollte das ganze natürlich so automatisch wie nur irgend möglich funzen. soll heißen: ich will nicht in der mitte vom ablauf ca. 500 x enter drücken um einfach "immer default" ausgewählt zu haben. jetzt brauche ich bisschen eure ideen: wie löse ich das am besten via #!/bin/sh? DANKE bigredeyes Zitieren
TheFinn Geschrieben 23. Januar 2008 Geschrieben 23. Januar 2008 Schon mal die man page zu yes(1) gelesen? Zitieren
bigredeyes Geschrieben 25. Januar 2008 Autor Geschrieben 25. Januar 2008 so funzt es: ./script.sh <<< \ \ kann mir einer erklären warum??? bigredeyes p.s. script.sh sieht so aus: #!/bin/sh VAR=DUMMY read VAR echo $VAR > orschlurch.txt read VAR echo $VAR >> orschlurch.txt read VAR echo $VAR >> orschlurch.txt read VAR echo $VAR >> orschlurch.txt echo vorbei >> orschlurch.txt hab es mit 'make oldconfig' noch nicht probiert. sollte es wider erwarten nicht klappen, dann schrei ich nochmal ganz laut. Zitieren
TheFinn Geschrieben 25. Januar 2008 Geschrieben 25. Januar 2008 so funzt es: ./script.sh <<< \ \ kann mir einer erklären warum??? Na ja, das bash-Manual sagt dazu folgendes: Here Strings A variant of here documents, the format is: <<<word The word is expanded and supplied to the command on its standard input. Das word ist dabei in Deinem Fall, hmm, ein maskiertesn Leerzeichen? Weißraum kann so tricky sein... Wenn Du das Leerzeichen zwischen den beiden Backslashes wegläßt, mußt Du übrigens am Ende der Zeile nur einmal die Enter-Taste drücken. Was hier letztlich passiert, ist einfach, daß Du Dein Skript einen Zeilenwechsel von der Standardeingabe einlesen läßt. Das Problem dabei (und deswegen hatte ich Dir das Programm yes empfohlen), daß dieser Zeilenwechsel nur einmal eingelesen wird. Bei den folgenden Aufrufen von read in Deinem Skript, greift folgende Eigenart dieses shell builtin: If there are fewer words read from the input stream than names, the remaining names are assigned empty values. Das kannst Du auch überprüfen, indem Du statt des Zeilenwechsels mal ein a übergibst, also ./script.sh <<< a aufrufst. Das a steht dann nur in einer Zeile Deiner Ausgabedatei. Es hängt nun von dem Skript ab, das Du letztendlich benutzen willst, ob es damit klarkommt. Wenn dort auch immer read benutzt wird und leere Werte als Bestätigung OK sind, kein Problem. Falls das Skript allerdings auf irgendeine ausgefeiltere Art explizit ASCII-Zeichen 13 einzulesen versucht und einen leeren String nicht akzeptiert, funktioniert es halt nicht mehr. Zitieren
bigredeyes Geschrieben 29. Januar 2008 Autor Geschrieben 29. Januar 2008 so, danke! ich habe nun mal eine echtes "script-kiddie" befragt. dieser sagte mir auch dass ' blub.sh <<<\ \' doch sehr seltsam sei... das mit <<<a habe ich auch mal probiert. stimmt, wird nur einmal 'a' eingetragen. der rest ist 'leer'. eigentlich wie gewünscht. nur warum.... wie würde man denn mit 'yes' ein CR schreiben? bigredeyes Zitieren
TheFinn Geschrieben 29. Januar 2008 Geschrieben 29. Januar 2008 wie würde man denn mit 'yes' ein CR schreiben? Jetzt bitte nicht lachen, aber: indem Du dem yes einen leeren String als Argument mitgibst, also yes '' | blub.sh Der Antwortstring von yes (per Default 'y') wird mit einem CR abgeschlossen. Die Tatsache, daß Du in der Ergebnisdatei Deines Skriptes auch mehrere Zeilen hattest, liegt an Deiner Benutzung von echo im Skript. Du hast das CR nicht von der Eingabe eingelesen sondern nur mit dem Skript ausgegeben. Das kannst Du sehen, indem Du einfach mal alle read-Anweisungen bis auf die erste rauslöschst. Dann hast Du eine Datei, die genauso viele zeilen hat wie die mit den read-Anweisungen erzeugte. Dann steht bei blub.sh <<<a sogar das 'a' in den ersten vier Zeilen (weil Du es nach dem ersten read nicht mehr veränderst), bringt Dir aber nix, weil das Skript das 'a' viermal von der Eingabe einlesen soll... Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.