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

Eingabeumleitung (cmd<datei) OHNE input-datei möglich?

trevilor

Newbie
Hallo

Mit interaktiven Konsolenprogrammen oder Shellbefehlen automatisiert zu kommunizieren ist ja mit einer Eingabeumleitung möglich.

Ich frage mich, ob aber in jedem Fall eine Datei, aus der die Eingaben umgeleitet werden, notwendig ist.

Zum Beispiel:
$ sudo useradd testuser
$ sudo passwd testuser
Geben Sie ein neues UNIX Passwort ein: <mypassword>
Geben Sie das neue UNIX Passwort erneut ein: <mypassword>
passwd: Passwort erfolgreich geändert
&

Die Interaktion könnte ja wie folgt automatisiert werden:
$ sudo useradd testuser && echo mypassword > tempfile && echo mypassword >> tempfile && sudo passwd testuser < tempfile && rm tempfile


Nun: Ist dieses Anlegen einer temporären Datei notwendig oder geht es irgendwie eleganter? Z.B. durch direkte Umleitung der Kanäle oder so.

Das ist eine allgemeine Frage und nicht auf useradd beschränkt bzw. hat damit nichts zu tun. Habe useradd nur aus Gründen der Verbreitung dieses Tools und der Anschaulichkeit gewählt.

Danke, trevilor
 

P6CNAT

Advanced Hacker
Hi,

man kann unter den Unix-Shells schon recht abenteuerliche Umleitungen fabrizieren, aber die haben auch Grenzen. Und ob die dann noch als elegant betrachtet werden können? Ich zweifle. Damit das Ganze überschaubar bleibt verwendet man eben Dateien oder Variablen. Man kann auch sowas machen:

Code:
variable_liste=`ls *.html`
for x in $variable_liste; do echo $x; done

der Eingabeparameter für echo ist in diesem Fall ein Element der Variablen $variable_liste oder

Code:
kommando <<ENDofEINGABE
 hier kriegt das Kommando seine Parameter z.B. eine
 $variable_liste
ENDofEINGABE
 
A

Anonymous

Gast
trevilor schrieb:
Nun: Ist dieses Anlegen einer temporären Datei notwendig oder geht es irgendwie eleganter? Z.B. durch direkte Umleitung der Kanäle oder so.

entweder man nimmt dazu tools die dazu entwickelt wurden ohne Interaktivität im Script zu arbeiten. zB chpasswd
oder man nimmt die Optionen die dazu gedacht sind mit der Standardeingabe vernünftig zu arbeiten.

Code:
echo $PASSWD  | passwd --stdin $USER

oder man arbeitet mit Here Dokumenten. Wenn es durchaus einmal keine andere Alternative als ein Interaktives Programm geben sollte, dann erstellt man ein sauber arbeitentes expect-Script aber in keinem vernünftigen Fall macht man so Verrenkungen über eine temporäre Datei wenn es sich nicht irgendwie vermeiden lässt.

robi
 
A

Anonymous

Gast
trevilor schrieb:
Aber
"passwd: unrecognized option '--stdin'"
ist womoglich Versionsabhängig
bei mir derzeit auf diesem Rechner geht es
Code:
priv0001:/tmp # passwd --version
passwd (pwdutils) 3.1.2
Copyright (C) 2006 Thorsten Kukuk.

Mangage schrieb:
SYNOPSIS
passwd [-f|-g|-s|-k[-q]] [name]
passwd [-D binddn][-n min][-x max][-w warn][-i inact] account
passwd [-D binddn] {-l|-u|-d|-S[-a]|-e} name
passwd --bioapi [account]
passwd --stdin [account]

robi
 
Oben