Necesito ejecutar un script canalizando a través bash
de wget
(en lugar de ejecutarlo directamente con bash).
$ wget -O - http://example.com/my-script.sh | bash
No funciona porque mi script tiene read
declaraciones en él. Por alguna razón, estos no funcionan cuando se conecta a bash:
# Piping to bash works in general
$ echo 'hi'
hi
$ echo "echo 'hi'" | bash
hi
# `read` works directly
$ read -p "input: " var
input: <prompt>
# But not when piping - returns immediately
$ echo 'read -p "input: " var' | bash
$
En lugar de solicitar input:
y pedir un valor como debería, el comando de lectura simplemente se pasa por alto bash
.
¿Alguien sabe cómo puedo canalizar un script read
a bash
?
La sustitución del proceso hará lo que quieras:
bash <(wget ...)
Dicho esto, tengo que cuestionar tu motivación aquí. Si controla el servidor web (y usa https), entonces quizás esto tenga sentido. Pero solo ejecutar un script desde Internet es muy arriesgado.
fuente
just running a script from the internet blind is very risky
Sí, sabemos que es arriesgado, pero las personas pueden optar por confiar en los scripts de ciertas organizaciones. Vea la discusión en los comentarios sobre la respuesta de @ Xen2050.¿Hay algo malo con:
?
fuente
/tmp
, muchos programas usan archivos temporales. Me cansaría de ejecutar cualquier script descargado de inmediato sin echar un vistazo primero ...