web-dev-qa-db-fra.com

Exécuter le script bash à partir d'une URL

Dites que j'ai un fichier à l'URL "http://mywebsite.com/myscript.txt" qui contient un script:

#!/bin/bash
echo "Hello, world!"
read -p "What is your name? " name
echo "Hello, ${name}!"

Et j'aimerais lancer ce script sans l'enregistrer au préalable dans un fichier. Comment puis-je faire cela?

Maintenant, j'ai vu la syntaxe:

bash < <(curl -s http://mywebsite.com/myscript.txt)

Mais cela ne semble pas fonctionner comme si j’étais enregistré dans un fichier puis exécuté. Par exemple, readline ne fonctionne pas et le résultat est simplement:

$ bash < <(curl -s http://mywebsite.com/myscript.txt)
Hello, world!

De même, j'ai essayé:

curl -s http://mywebsite.com/myscript.txt | bash -s --

Avec les mêmes résultats.

A l'origine j'avais une solution comme:

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

Mais cela semble négligé et j'aimerais une solution plus élégante.

Je suis conscient des problèmes de sécurité liés à l'exécution d'un script Shell à partir d'une URL, mais ignorons tout cela pour le moment.

136
Tristan
source <(curl -s http://mywebsite.com/myscript.txt)

devrait le faire. Sinon, laissez la redirection initiale sur la vôtre, qui redirige l'entrée standard; bash prend un nom de fichier pour s'exécuter parfaitement sans redirection, et la syntaxe <(command) fournit un chemin.

bash <(curl -s http://mywebsite.com/myscript.txt)

Cela peut être plus clair si vous regardez le résultat de echo <(cat /dev/null)

173
geekosaur

C'est le moyen d'exécuter un script distant en lui passant des arguments (arg1 arg2):

curl -s http://server/path/script.sh | bash /dev/stdin arg1 arg2
73
Anandi Das

Pour bash:

curl -s http://server/path/script.sh | bash -s arg1 arg2

Bourne Shell prend également en charge les "-s" à lire à partir de stdin. 

28
user77115

Utilisation de wget, qui fait généralement partie de l’installation par défaut du système:

bash <(wget -qO- http://mywebsite.com/myscript.txt)
14
amra

Vous pouvez aussi faire ceci:

wget -O - https://raw.github.com/luismartingil/commands/master/101_remote2local_wireshark.sh | bash
11
luismartingil

Essayez juste:

bash <(curl -s http://mywebsite.com/myscript.txt)
11
Random832

Utilisation:

curl -s -L URL_TO_SCRIPT_HERE | bash

Par exemple:

curl -s -L http://bitly/10hA8iC | bash
10
Katie MC

La meilleure façon de le faire est

curl http://domain/path/to/script.sh | bash -s arg1 arg2

ce qui est un léger changement de réponse de @ user77115

9
Vamsidhar Muggulla

J'utilise souvent ce qui suit est suffisant

curl -s http://mywebsite.com/myscript.txt | sh

Mais dans un ancien système (kernel2.4), il rencontre des problèmes, et ce qui suit peut le résoudre, j'en ai essayé beaucoup d'autres, seuls les travaux suivants

curl -s http://mywebsite.com/myscript.txt -o a.sh && sh a.sh && rm -f a.sh

Exemples

$ 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'
$

Le problème peut être dû à un réseau lent ou à une version trop ancienne trop ancienne pour laquelle le réseau ne peut pas être géré lentement.

Cependant, ce qui suit résout le problème

$ 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
$
4
Chinglin Wen

Juste en combinant les réponses de amra et user77115: 

wget -qO- https://raw.githubusercontent.com/lingtalfi/TheScientist/master/_bb_autoload/bbstart.sh | bash -s -- -v -v

Il exécute le script distant bbstart.sh en lui transmettant les options -v -v.

4
ling

Également:

curl -sL https://.... | Sudo bash -
4
Thomas Decaux

Cette voie est bonne et conventionnelle:

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: $#
0
javafoot
bash | curl http://your.url.here/script.txt

exemple réel:

juan@juan-MS-7808:~$ bash | curl https://raw.githubusercontent.com/JPHACKER2k18/markwe/master/testapp.sh


Oh, wow im alive


juan@juan-MS-7808:~$ 
0
Random memes 2k18