linux - ejemplos - bash script example
Ejecute el script bash desde la URL (12)
Supongamos que tengo un archivo en la URL "http://mywebsite.com/myscript.txt" que contiene un script:
#!/bin/bash
echo "Hello, world!"
read -p "What is your name? " name
echo "Hello, ${name}!"
Y me gustaría ejecutar este script sin guardarlo primero en un archivo. ¿Cómo hago esto?
Ahora, he visto la sintaxis:
bash < <(curl -s http://mywebsite.com/myscript.txt)
Pero esto no parece funcionar como lo haría si guardara en un archivo y luego lo ejecutara. Por ejemplo readline no funciona, y la salida es justa:
$ bash < <(curl -s http://mywebsite.com/myscript.txt)
Hello, world!
Del mismo modo, lo he intentado:
curl -s http://mywebsite.com/myscript.txt | bash -s --
Con los mismos resultados.
Originalmente tenía una solución como:
timestamp=`date +%Y%m%d%H%M%S`
curl -s http://mywebsite.com/myscript.txt -o /tmp/.myscript.${timestamp}.tmp
bash /tmp/.myscript.${timestamp}.tmp
rm -f /tmp/.myscript.${timestamp}.tmp
Pero esto parece descuidado, y me gustaría una solución más elegante.
Soy consciente de los problemas de seguridad relacionados con la ejecución de un script de shell desde una URL, pero ignoremos todo eso por el momento.
A menudo uso lo siguiente es suficiente
curl -s http://mywebsite.com/myscript.txt | sh
Pero en un sistema antiguo (kernel2.4), encuentra problemas, y lo siguiente puede resolverlo, probé muchos otros, solo los siguientes trabajos
curl -s http://mywebsite.com/myscript.txt -o a.sh && sh a.sh && rm -f a.sh
Ejemplos
$ curl -s someurl | sh
Starting to insert crontab
sh: _name}.sh: command not found
sh: line 208: syntax error near unexpected token `then''
sh: line 208: ` -eq 0 ]]; then''
$
El problema puede ser causado por la red lenta, o la versión bash demasiado vieja que no puede manejar la red lenta y elegantemente
Sin embargo, lo siguiente resuelve el problema
$ curl -s someurl -o a.sh && sh a.sh && rm -f a.sh
Starting to insert crontab
Insert crontab entry is ok.
Insert crontab is done.
okay
$
De esta manera es bueno y convencional:
17:04:59@itqx|~
qx>source <(curl -Ls http://192.168.80.154/cent74/just4Test) Lord Jesus Loves YOU
Remote script test...
Param size: 4
---------
17:19:31@node7|/var/www/html/cent74
arch>cat just4Test
echo Remote script test...
echo Param size: $#
Esta es la forma de ejecutar un script remoto con pasarle algunos argumentos (arg1 arg2):
curl -s http://server/path/script.sh | bash /dev/stdin arg1 arg2
La mejor manera de hacerlo es
curl http://domain/path/to/script.sh | bash -s arg1 arg2
que es un ligero cambio de respuesta por @ user77115
Para bash:
curl -s http://server/path/script.sh | bash -s arg1 arg2
Bourne Shell también admite "-s" para leer de stdin.
Prueba solo:
bash <(curl -s http://mywebsite.com/myscript.txt)
Simplemente combinando las respuestas de amra y user77115:
wget -qO- https://raw.githubusercontent.com/lingtalfi/TheScientist/master/_bb_autoload/bbstart.sh | bash -s -- -v -v
Ejecuta el script distante bbstart.sh pasando las opciones -v -v.
También puedes hacer esto:
wget -O - https://raw.github.com/luismartingil/commands/master/101_remote2local_wireshark.sh | bash
También:
curl -sL https://.... | sudo bash -
Usando wget
, que generalmente es parte de la instalación predeterminada del sistema:
bash <(wget -qO- http://mywebsite.com/myscript.txt)
curl -s -L URL_TO_SCRIPT_HERE | intento
por ejemplo::
curl -s -L http://bitly/10hA8iC | bash
source <(curl -s http://mywebsite.com/myscript.txt)
debería hacerlo Alternativamente, deje la redirección inicial en el suyo, que está redirigiendo la entrada estándar; bash
toma un nombre de archivo para ejecutar sin problemas, sin redireccionamiento, y la sintaxis <(command)
proporciona una ruta.
bash <(curl -s http://mywebsite.com/myscript.txt)
Puede ser más claro si observa la salida de echo <(cat /dev/null)