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.
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.
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
Für bash:
curl -s http://server/path/script.sh | bash -s arg1 arg2
Bourne Shell unterstützt auch "-s" zum Lesen von stdin.
Verwenden Sie wget
, das normalerweise Bestandteil der Standardsysteminstallation ist:
bash <(wget -qO- http://mywebsite.com/myscript.txt)
Sie können dies auch tun:
wget -O - https://raw.github.com/luismartingil/commands/master/101_remote2local_wireshark.sh | bash
Versuchen Sie es einfach:
bash <(curl -s http://mywebsite.com/myscript.txt)
Benutzen:
curl -s -L URL_TO_SCRIPT_HERE | bash
Zum Beispiel:
curl -s -L http://bitly/10hA8iC | bash
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
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
$
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.
Ebenfalls:
curl -sL https://.... | Sudo bash -
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.
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: $#
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]:~$