3 votos

Fuente a script de una URL en bash

Deduzco que esto debería funcionar en la fiesta:

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 funciona para mí. Descargar a un archivo, buscar el archivo y luego eliminar el archivo hace trabajo. Tengo curiosidad por saber por qué ninguno de los transatlánticos funciona.

2voto

Ryan Spears Puntos 1524

Está en lo cierto que sus dos primeros on-liners debería trabajar de acuerdo con Bash semántica de sustitución de procesos . En mi pruebas ( bash 3.2 en OS X 10.8.2), el segundo sí, mientras que el primero no.

En el caso de tu primera línea, parece que te encuentras con una de las limitaciones de la sustitución de procesos. Citando el Página de Wikipedia sobre la sustitución de procesos :

La sustitución de procesos tiene algunas limitaciones: los "archivos" creados no son buscables, lo que significa que el proceso que lee o escribe 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 fracaso para trabajar con la sustitución de procesos.

La segunda línea posiblemente sólo parece fallar porque ejecuta el código en una subcapa en lugar de obtenerlo. Si esperas que establezca alias y funciones, esto no funcionará, ya que estos no se trasladan a la shell padre cuando se definen en una sub-shell.

La tercera línea no funciona porque source no procesa stdin - sólo archivos (ver página de bash man ).

1voto

NaWi at Mac Puntos 161

No sé qué es lo que te gusta hacer, pero si quieres descargar un script (o lo que sea) usa.

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

para más detalles ver

man curl 

en la terminal. - es silencioso, -L ubicación del objetivo, incluyendo la redirección a un nuevo objetivo, -o archivo de salida, si no lo usas, entonces Curl usa el nombre del archivo en el objetivo (-o es a menudo muy útil).

Para ejecutar el script usa

./script.sh

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X