• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

Shell Script: Eingabeaufforderung bei Befehlen umgehen

rooney

Newbie
Hallo!

Bin gerade erst in die Shell Script Programmierung eingestiegen und schon habe ich ein kleines Problem, welches ihr sicher lösen könnt.

Wenn man apt-get install XXX macht oder mkfs.ext3 XXX dann kommt es hin und wieder vor, dass der Befehl angehalten wird und vom Benutzer eine Eingabe erfordert.
Ich schreibe im Moment ein etwas größeres Skript um ein Filesystem für einen Kernel zu erstellen. Das ganze soll voll automatisch ablaufen, also starten und das Teil läuft von selbst.
Jetzt sind diese erforderlichen Eingaben bei gewissen Befehlen mehr als mühsam und mein Vorhaben kann nicht vollständig umgesetzt werden. Nachdem ich ohnehin immer die Eingabe gleich bestätige stell ich mir die Frage ob es möglich ist, dass die Eingabe von meinem übergeordneten Skript automatisch gemacht wird, so dass keine Eingabe mehr vom Benutzer erforderlich ist.

lg
Rooney
 

boser

Member
Hallo,
ich aus Frühererenzeiten noch, das man im Shell-Scripten, die Eingabe mit "<<" erreichen kann. Dazu ein Beispiel :

------- Script -------------
#!/bin/sh
su << "[Passwort]"
yast
----- Script ende ----------

damit soll Yast sofort gestartet werden, ohne P/W eingabe.

mfg
boser
 
A

Anonymous

Gast
Hilft letztlich nur: erstens Befehle aussuchen die für Scripte geeignet sind, und zweitens deren Manpage lesen und die Befehle dann so präzise angeben, das eben keine Nachfragen mehr kommen können bzw. für viele solche Befehle gibt es oftmals auch Optionen mit denen man eventuelle interaktive Eingaben automatisch beantworten kann und auch welche um zB. die unnützen Ausgaben für den Einsatz in Scripten unterdrücken zu können.
zB aus der manpage der apt-get
-y
--yes
--assume-yes
Automatic yes to prompts; assume "yes" as answer to all prompts and run non-interactively. If an undesirable situation, such as changing a held package or removing an essential package occurs then apt-get will abort. Configuration Item: APT::Get::Assume-Yes.

robi
 

RME

Advanced Hacker
Automatische Antworten -- Könnte ja auch ziemlich gefährlich sein oder?

Gruss,
Roland
 

framp

Moderator
Teammitglied
RME schrieb:
Automatische Antworten -- Könnte ja auch ziemlich gefährlich sein oder?

Gruss,
Roland
Es gibt da ein Tool namens expect. Damit kann man eine Menge anfackeln ... aber ehlich gesagt - es muss sich nur irgendein Buchstabe in der erwarteten Antwort ändern - und alles ist Essig. Ergo: Dieser Hinweis -> atYouOwnRisk
 

abgdf

Guru
rooney schrieb:
und schon habe ich ein kleines Problem, welches ihr sicher lösen könnt.
Das Problem ist nicht einfach. Man kann den Eingabekanal eines Programs z.B. mit Python kontrollieren, wenn man genau weiß (bzw. ausprobiert), wie sich das Programm verhält.
Hier am Beispiel von zwei Skripten "aprogram.sh" und "control.py":
Code:
#!/bin/bash

# aprogram.sh

a=1
for(( i=1; i<=3; i++ ))
do
    echo "Drei Sekunden warten."
    sleep 3
    echo -n "Eingabe $a: "
    read b
    echo "Eingabe war: $b"
    let "a+=1"
done
echo "Fertig."
und
Code:
#!/usr/bin/env python
#-*- coding: iso-8859-1 -*-

# control.py

import subprocess

p = subprocess.Popen(executable = "aprogram.sh",
                     args = "",
                     stdin = subprocess.PIPE,
                     stdout = subprocess.PIPE)

inputs = ("abc", "def", "ghi")

for i in range(3):
    print p.stdout.readline().rstrip("\n")
    p.stdin.write(inputs[i] + "\n")
    print p.stdout.readline().rstrip("\n")
Probier' das erstmal direkt als "aprogram.sh" aus und danach über "control.py".
Ansonsten wäre etwas mit "Sendkeys" denkbar ("man xvkbd" ist da ein Ausgangspunkt unter Linux). Tatsächlich ist man jedoch meistens auf dem Holzweg, wenn man denkt, daß man für ein Problem "Sendkeys" brauche (was hin- und wieder mal vorkommt (daß man das denkt)) ...

Gruß
 
OP
R

rooney

Newbie
Danke für die Tipps!

Hab's jetzt mit der Option -y bei apt-get und bei mkfs.ext3 mit Option -F realsiert und funktioniert für meine Zwecke im Moment zufriedenstellend.

lg
Rooney
 

K4m1K4tz3

Advanced Hacker
Kleiner Tipp am Rande: Wenn du schon alles automatisch machen willst/musst, dann vergesse nicht die Rückgabewerte der Programme zu überprüfen. Evtl. läuft ja doch was schief.
 
Oben