Variable im Terminal setzen ohne Ausgabe

Alles was in keine andere Systemkategorie passt
breiteseite
Posts: 14
Joined: 2007-03-22 12:34
Location: Nähe Chemnitz

Variable im Terminal setzen ohne Ausgabe

Post by breiteseite » 2009-03-24 09:51

Hallo,

ich suche eine Binary unter Linux, mit welcher ich eine Variable für die Terminal-Session setzen kann, ohne das meine Eingabe angezeigt wird. Zum Beispiel um $PASS zu setzen. Soll ja nicht jeder sehen. ;)

Ich google mich schon die ganze Zeit tot und such mich dumm und dusselig, kann mir jemand auf die Sprünge helfen??

LG

bluewind
Posts: 17
Joined: 2008-03-18 19:28

Re: Variable im Terminal setzen ohne Ausgabe

Post by bluewind » 2009-03-24 18:08

flo@Marin - ~ (master)
[18:07:59] > stty -echo && read foo && stty echo
flo@Marin - ~ (master)
[18:08:14] > echo $foo
hiddeninput

User avatar
daemotron
Administrator
Administrator
Posts: 2800
Joined: 2004-01-21 17:44

Re: Variable im Terminal setzen ohne Ausgabe

Post by daemotron » 2009-03-24 18:33

Böse Lösung, Du weißt ja nicht, welchen Status stty vorher hatte - also explizit wieder auf echo setzen ist keine gute Idee. Hier ist eine etwas umfassendere Lösung beschrieben, die auch im Falle eines Abbruchs stty auf den Originalwert zurücksetzt: http://code.techinterviews.com/read-pas ... x-shell/11
“Some humans would do anything to see if it was possible to do it. If you put a large switch in some cave somewhere, with a sign on it saying 'End-of-the-World Switch. PLEASE DO NOT TOUCH', the paint wouldn't even have time to dry.” — Terry Pratchett, Thief of Time

breiteseite
Posts: 14
Joined: 2007-03-22 12:34
Location: Nähe Chemnitz

Re: Variable im Terminal setzen ohne Ausgabe

Post by breiteseite » 2009-03-24 20:13

Ha, danke jfreund. Über deinen Link war noch ein anderer Blog gelinkt. Dort stands.

read -s hab ich gesucht. :-)

User avatar
daemotron
Administrator
Administrator
Posts: 2800
Joined: 2004-01-21 17:44

Re: Variable im Terminal setzen ohne Ausgabe

Post by daemotron » 2009-03-25 10:51

Aber bitte beachten: read ist ein sog. "builtin command"; d. h. es ist kein separates Binary, sondern wird von der jeweils verwendeten Shell implementiert. Der POSIX-Standard garantiert zwar das Vorhandensein des read-Kommandos in jeder POSIX-konformen Shell, nicht jedoch die Verfügbarkeit der -s Option. So implementieren Bash und ZSH diese Option, wohingegen die Debian Almquist Shell (dash), FreeBSD's sh (ein Almquist Shell Ableger) und viele weitere Bourne-Shell Clones diese Option nicht implementieren.

Im Zuge sauberer Shellskript-Programmierung muss also zwingend Bash oder ZSH im Shebang angewählt werden, da z. B. bei Ubuntu und Debian Lenny (hoffe, die Ankündigung stimmt noch...) unter /bin/sh die Debian Almquist Shell (dash) gelinkt ist, die eben read -s nicht versteht.
“Some humans would do anything to see if it was possible to do it. If you put a large switch in some cave somewhere, with a sign on it saying 'End-of-the-World Switch. PLEASE DO NOT TOUCH', the paint wouldn't even have time to dry.” — Terry Pratchett, Thief of Time