it-swarm.com.de

Führen Sie das Bash-Skript über die URL aus

Angenommen, ich habe unter der URL "http://mywebsite.com/myscript.txt" eine Datei, die ein Skript enthält:

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

Und ich möchte dieses Skript ausführen, ohne es vorher in einer Datei zu speichern. Wie mache ich das?

Nun habe ich die Syntax gesehen:

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

Dies scheint jedoch nicht so zu funktionieren, als würde ich es in einer Datei speichern und dann ausführen. Zum Beispiel funktioniert readline nicht und die Ausgabe ist nur:

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

Ähnlich habe ich versucht:

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

Mit den gleichen Ergebnissen.

Ursprünglich hatte ich eine Lösung wie:

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

Dies scheint jedoch schlampig zu sein, und ich hätte gerne eine elegantere Lösung.

Ich bin mir der Sicherheitsprobleme bei der Ausführung eines Shell-Skripts über eine URL bewusst, aber ignorieren wir das alles jetzt.

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

sollte es tun. Lassen Sie alternativ die anfängliche Weiterleitung auf Ihrer weg, wodurch die Standardeingabe umgeleitet wird. bash nimmt einen Dateinamen zur Ausführung ohne Umleitung vor, und die <(command)-Syntax stellt einen Pfad bereit.

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

Es kann klarer sein, wenn Sie die Ausgabe von echo <(cat /dev/null) betrachten.

173
geekosaur

Auf diese Weise können Sie ein Remote-Skript ausführen, an das einige Argumente (arg1 arg2) übergeben werden:

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

Für bash:

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

Bourne Shell unterstützt auch "-s" zum Lesen von stdin. 

28
user77115

Verwenden Sie wget, das normalerweise Bestandteil der Standardsysteminstallation ist:

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

Sie können dies auch tun:

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

Versuchen Sie es einfach:

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

Benutzen:

curl -s -L URL_TO_SCRIPT_HERE | bash

Zum Beispiel:

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

Am besten geht es

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

dies ist eine geringfügige Änderung der Antwort von @ user77115

9

Ich benutze oft das Folgende

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

Aber in einem alten System (Kernel2.4) stößt es auf Probleme und kann das Folgende lösen, ich habe viele andere probiert, nur die folgenden Werke

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

Beispiele

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

Das Problem kann durch langsame Netzwerk- oder Bash-Versionen zu alt werden, die das langsame Netzwerk nicht ordnungsgemäß verarbeiten

Das Folgende löst jedoch das Problem

$ 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

Einfach die Antworten von amra und user77115 kombinieren: 

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

Es führt das entfernte Skript bbstart.sh aus und übergibt die Optionen -v -v.

4
ling

Ebenfalls:

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

Bei einigen unbeaufsichtigten Skripten verwende ich den folgenden Befehl:

sh -c "$(curl -fsSL <URL>)"

Ich empfehle, keine Skripte direkt über URLs auszuführen. Sie sollten sicher sein, dass die URL sicher ist, und den Inhalt des Skripts vor der Ausführung überprüfen. Sie können eine SHA256-Prüfsumme verwenden, um die Datei vor der Ausführung zu überprüfen.

1

Dieser Weg ist gut und konventionell:

17:04:[email protected]|~
qx>source <(curl -Ls http://192.168.80.154/cent74/just4Test) Lord Jesus Loves YOU
Remote script test...
Param size: 4

---------
17:19:[email protected]|/var/www/html/cent74
Arch>cat just4Test
echo Remote script test...
echo Param size: $#
0
javafoot
bash | curl http://your.url.here/script.txt

aktuelles Beispiel:

[email protected]:~$ bash | curl https://raw.githubusercontent.com/JPHACKER2k18/markwe/master/testapp.sh


Oh, wow im alive


[email protected]:~$ 
0