Fuente un script desde una URL en bash

3

Supongo que esto debería funcionar en bash:

source <(curl -s https://example.com/script.sh)

o

bash <(curl -s https://example.com/script.sh)

o

curl -s https://example.com/script.sh | source /dev/stdin

Pero no está funcionando para mí. Descargar a un archivo, obtener el archivo y luego eliminar el archivo no funciona. Sin embargo, tengo curiosidad por saber por qué ninguno de los forros está funcionando.

    
pregunta rich 25.01.2013 - 23:58

2 respuestas

2

Tienes razón en que tus dos primeros en línea deberían estar funcionando según bash semántica de sustitución de procesos . En my testing ( bash 3.2 en OS X 10.8 .2), el segundo lo hace, mientras que el primero no.

En el caso de su primera línea, parece que se está ejecutando en una de las limitaciones de la sustitución de procesos. Citando la página de Wikipedia sobre la sustitución de procesos :

  

La sustitución del proceso tiene algunas limitaciones: los "archivos" creados no se pueden buscar, lo que significa que el proceso de lectura o escritura en el archivo no puede realizar un acceso aleatorio; Debe leer o escribir una vez de principio a fin. Los programas que comprueban explícitamente el tipo de un archivo antes de abrirlo pueden negarse a trabajar con la sustitución de procesos, porque el "archivo" resultante de la sustitución de procesos no es un archivo normal.

: si source es un comando que tiene dificultades con esto (al menos en bash 3.2), eso explicaría su incapacidad para trabajar con la sustitución de procesos.

El segundo one-liner posiblemente parezca fallar porque ejecuta el código en una subshell en lugar de buscarlo. Si espera que establezca alias y funciones, esto no funcionará, ya que no se transfieren al shell principal cuando se define en una subshell.

El tercer one-liner no funciona porque source no procesa stdin - solo archivos (vea bash página de manual ).

    
respondido por el kopischke 28.01.2013 - 09:26
1

No sé qué te gusta hacer pero si te gusta descargar un script (o lo que sea) para usar.

curl -s -L https://example.com/script.sh -o script.sh

para más detalles vea

man curl 

en la terminal. -s silencioso, -L ubicación del destino, incluida la redirección a un nuevo destino, -o archivo de salida, si no lo usas, curl usa el nombre de archivo en el objetivo (-o suele ser muy útil).

Para ejecutar el script de uso

./script.sh
    
respondido por el NaWi at Mac 26.01.2013 - 01:20

Lea otras preguntas en las etiquetas