Esto es MUCHO más de lo que solicitó el OP, pero dado que este es un resultado superior para pasar contraseñas de forma segura curl, estoy agregando estas soluciones aquí para otros que llegan aquí buscando eso.
NOTA: -sarg for readcommand no es POSIX, por lo que no está disponible en todas partes, por lo que no se utilizará a continuación. Vamos a utilizar stty -echoy en su stty echolugar.
NOTA: Todas las variables de bash a continuación podrían declararse como locales si están en una función, en lugar de desarmarse.
NOTA: perlgeneralmente está disponible en todos los sistemas que he probado debido a que es una dependencia para muchas cosas, mientras que rubyy pythonno lo está, por lo que lo uso perlaquí. Si puede garantizar ruby/ pythondónde está haciendo esto, puede reemplazar elperl comando con su equivalente.
NOTA: Probado en bash3.2.57 en macOS 10.14.4. Es posible que se requiera una pequeña traducción para otros shells / instalaciones.
Solicite de forma segura a un usuario una contraseña (reutilizable) para pasar a curl. Particularmente útil si necesita llamar a curl varias veces.
Para proyectiles modernos, ¿dónde echoestá incorporado?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
Para los shells más antiguos, ¿dónde echoestá algo así /bin/echo(donde sea que se vea lo que se puede ver en la lista de procesos):
ESTA VERSIÓN NO PUEDE REUTILIZAR LA CONTRASEÑA , vea más abajo en su lugar.
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 necesita almacenar la contraseña temporalmente en un archivo, volver a usarla para varios comandos antes de borrarla (por ejemplo, porque está usando funciones para la reutilización de código y no quiere repetir el código y no puede pasar el valor a través de echo). (Sí, estos son un poco artificiales, ya que en este formulario no se encuentran funciones en diferentes bibliotecas; intenté reducirlos al código mínimo necesario para mostrarlo).
Cuando echo está incorporado (esto es especialmente artificial, ya que echo está incorporado, pero se proporciona para completar):
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
Cuando echo es algo como /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