Ich habe ein Bash-Skript wie das folgende:
#!/bin/bash
echo "Please enter your username";
read username;
echo "Please enter your password";
read password;
Ich möchte, dass wenn der Benutzer das Passwort auf dem Terminal eingibt, es nicht angezeigt wird (oder so etwas wie *******). Wie erreiche ich das?
*
während Sie das Passwort eingebenread
? und andere.Antworten:
Geben Sie Ihren Leseanruf einfach wie folgt ein:
quelle
-s
Zeigt nichts an, während die Eingabe eingegeben wird. (-s
ist eine Nicht-POSIX-Erweiterung, daher wird sie nicht von allen Shells unterstützt, z. B. derash
mit BusyBoxssty -echo
man
Seite deutet darauf hin, dass-s
die Textfarbe der Hintergrundfarbe entspricht. Es hallt nur "lautlos". ss64.com/bash/read.htmlSilent mode. If input is coming from a terminal, characters are not echoed.
Aktualisieren
Wenn Sie Lust haben möchten, indem Sie
*
für jedes eingegebene Zeichen ein ausgeben , können Sie Folgendes tun (mit derread -s
Lösung von andreas ):Ohne ausgefallen zu sein
quelle
IFS=$'\n'
so sein, dass Sie die Eingabe des Passworts tatsächlich beenden können . Ansonsten schön; sehr schlau.IFS=$'\n'
da das Standardtrennzeichen von read ist-d $'\n'
. Die if-Anweisung zum Unterbrechen einer Nullzeichenfolge, die in einer neuen Zeile vorkommt, ermöglicht es ihnen, das Kennwort zu beenden.read
ein-d ''
. Als ich es später unter Linux erneut versuchte, verwendete ich die neu veröffentlichte Version. Wenn ich versuche wegzulassen-d ''
, funktioniert es natürlich identisch mit FreeBSD! Ich bin eigentlich ziemlich erleichtert, dass hier keine mysteriöse Plattformmagie am Werk ist.Für eine Lösung, die ohne Bash oder bestimmte Funktionen von funktioniert, können
read
Sie dasstty
Echo deaktivierenquelle
Hier ist eine Variation der hervorragenden
*
Drucklösung von @ SiegeX für diebash
Unterstützung von Backspace . Auf diese Weise kann der Benutzer seine Eingabe mit dembackspace
Schlüssel (delete
Schlüssel auf einem Mac) korrigieren , wie dies normalerweise durch Kennwortabfragen unterstützt wird:Hinweis:
0x7f
die Rücktaste drücken, wird der Zeichencode aufgezeichnet: "In modernen Systemen wird die Rücktaste häufig dem Löschzeichen zugeordnet (0x7f in ASCII oder Unicode)." Https://en.wikipedia.org/wiki/Backspace\b \b
wird benötigt, um den Anschein zu erwecken, als würde das Zeichen links gelöscht. Nur mit\b
bewegt wird der Cursor nach links bewegt, das Zeichen bleibt jedoch intakt ( zerstörungsfreie Rücktaste). Wenn Sie ein Leerzeichen drucken und wieder zurückgehen, scheint das Zeichen gelöscht worden zu sein (danke, das Escapezeichen "\ b" in C, unerwartetes Verhalten? ).Verwenden Sie in einer Nur-POSIX- Shell (z. B.
sh
unter Debian und Ubuntu, wo dies der Fallsh
istdash
) denstty -echo
Ansatz (der nicht optimal ist, weil er nichts druckt ), da das integrierteread
Programm die Optionen-s
und nicht unterstützt-n
.quelle
Ein bisschen anders als die Antwort von @ lesmana (aber meistens ähnlich)
einfach: echo ausblenden zeigen deine sachen echo
quelle
stty
Aufruf und einer Variablen weniger auf dem Stapel - nur Echo wegnehmen und nur Echo wiederherstellen. Gibt es eine Möglichkeit, anderestty
Einstellungen zu stören ? Lesmana behält alle Einstellungen bei.Hier ist eine Variation der Antwort von @ SiegeX, die mit der traditionellen Bourne-Shell funktioniert (die keine Unterstützung für
+=
Zuweisungen bietet ).quelle
[[ ... ]]
, und ihrread
eingebautes System verfügt auch nicht über die Optionen-s
und-n
. Ihr Code funktioniert daher beispielsweise nichtdash
. (Es wird auf Plattformen funktionieren, auf denensh
es tatsächlich istbash
, wie unter OSX, wobash
beimsh
Aufrufen lediglich einige Standardoptionen geändert werden, während die meisten Bashismen weiterhin unterstützt werden.)[
Ihr Feedback, auf Single umgestellt, aber natürlich kann ich nicht viel tun, wenn Ihnenread
diese Optionen fehlen.Ich benutze immer gerne Ansi-Escape-Zeichen:
8m
macht Text unsichtbar und0m
setzt Text auf "normal" zurück. Das -e macht Ansi-Flucht möglich.Die einzige Einschränkung besteht darin, dass Sie den vorhandenen Text weiterhin kopieren und einfügen können. Daher sollten Sie ihn wahrscheinlich nicht verwenden, wenn Sie wirklich Sicherheit wünschen.
Damit können die Benutzer Ihre Passwörter beim Eingeben nicht einsehen. Lassen Sie Ihren Computer danach einfach nicht eingeschaltet. :) :)
HINWEIS:
Das Obige ist plattformunabhängig, solange es Ansi-Escape-Sequenzen unterstützt.
Bei einer anderen Unix-Lösung können Sie jedoch einfach festlegen
read
, dass die Zeichen nicht wiederholt werden sollen ...quelle
quelle