C'est BEAUCOUP plus que l'OP demandé, mais comme c'est le meilleur résultat pour passer des mots de passe en toute sécurité curl, j'ajoute ces solutions ici pour ceux qui arrivent ici à la recherche de cela.
REMARQUE: -sarg for readcommand n'est pas POSIX et n'est donc pas disponible partout, il ne sera donc pas utilisé ci-dessous. Nous utiliserons stty -echoet à la stty echoplace.
REMARQUE: Toutes les variables bash ci-dessous pourraient à la place être déclarées comme locales si elles sont dans une fonction, plutôt que de les désactiver.
REMARQUE: perlest généralement disponible sur tous les systèmes que j'ai essayés car il s'agit d'une dépendance pour de nombreuses choses, alors rubyque ce pythonn'est pas le cas, utilisez-la perlici. Si vous pouvez garantir ruby/ pythonoù vous faites cela, vous pouvez remplacer la perlcommande par leur équivalent.
REMARQUE: testé dans bash3.2.57 sur macOS 10.14.4. Quelques petites traductions peuvent être nécessaires pour d'autres shells / installations.
Invitez en toute sécurité un utilisateur à saisir un mot de passe (réutilisable) pour boucler. Particulièrement utile si vous devez appeler plusieurs fois curl.
Pour les coques modernes, où echoest intégré (vérifier via which echo):
url='https://example.com'
printf "Username: "
read username
printf "Password: "
stty -echo # disables echoing user input, POSIX equivalent for 'read -s'
read pass
printf "\n" # we need to move the line ahead
stty echo # re-enable echoing user input
echo ${pass} | sed -e "s/^/-u ${username}:/" | curl --url "${url}" -K-
unset username
unset pass
Pour les shells plus anciens, où echoest quelque chose comme /bin/echo(où quoi que ce soit en écho peut être vu dans la liste des processus):
CETTE VERSION NE PEUT PAS RÉUTILISER LE MOT DE PASSE , voir plus bas à la place.
url='https://example.com'
printf "Username: "
read username
printf "Password: "
stty -echo # disables echoing user input, POSIX equivalent for 'read -s'
perl -e '
my $val=<STDIN>;
chomp $val;
print STDERR "\n"; # we need to move the line ahead, but not send a newline down the pipe
print $val;
' | sed -e "s/^/-u ${username}:/" | curl --url "${url}" -K-
stty echo # re-enable echoing user input
unset username
Si vous avez besoin de stocker temporairement le mot de passe dans un fichier, de le réutiliser pour plusieurs commandes avant de l'effacer (par exemple, parce que vous utilisez des fonctions de réutilisation de code et que vous ne voulez pas répéter le code et ne pouvez pas transmettre la valeur via écho). (Oui, ceux-ci sont un peu artificiels car ils ne sont pas des fonctions dans différentes bibliothèques; j'ai essayé de les réduire au minimum de code pour le montrer.)
Lorsque l'écho est intégré (cela est particulièrement artificiel, car l'écho est intégré, mais fourni pour être complet):
url='https://example.com'
filepath="$(mktemp)" # random path, only readable by current user
printf "Username: "
read username
printf "Password: "
stty -echo # disables echoing user input, POSIX equivalent for 'read -s'
read pass
echo "${pass}" > "${filepath}"
unset pass
printf "\n" # we need to move the line ahead
stty echo # re-enable echoing user input
cat "${filepath}" | sed -e "s/^/-u ${username}:/" | curl --url "${url}" -K-
rm "${filepath}" # don't forget to delete the file when done!!
unset username
Quand l'écho est quelque chose comme /bin/echo:
url='https://example.com'
filepath="$(mktemp)" # random path, only readable by current user
printf "Username: "
read username
printf "Password: "
stty -echo # disables echoing user input, POSIX equivalent for 'read -s'
$(perl -e '
my $val=<STDIN>;
chomp $val;
open(my $fh, ">", $ARGV[0]) or die "Could not open file \"$ARGV[0]\" $\!";
print $fh $val;
close $fh;
' "$filepath")
printf "\n" # we need to move the line ahead
stty echo # re-enable echoing user input
cat "${filepath}" | sed -e "s/^/-u ${username}:/" | curl --url "${url}" -K-
rm "${filepath}" # don't forget to delete the file when done!!
unset username