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.
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)
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
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.
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)
Vous pouvez aussi faire ceci:
wget -O - https://raw.github.com/luismartingil/commands/master/101_remote2local_wireshark.sh | bash
Essayez juste:
bash <(curl -s http://mywebsite.com/myscript.txt)
Utilisation:
curl -s -L URL_TO_SCRIPT_HERE | bash
Par exemple:
curl -s -L http://bitly/10hA8iC | bash
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
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
$
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.
Également:
curl -sL https://.... | Sudo bash -
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: $#
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:~$