Ich brauche ein Skript ausgeführt werden soll , indem es durch Rohrleitungen bash
mit wget
(anstatt es direkt mit bash ausgeführt wird ).
$ wget -O - http://example.com/my-script.sh | bash
Es funktioniert nicht, weil mein Skript read
Anweisungen enthält. Aus irgendeinem Grund funktionieren diese nicht, wenn Sie zu bash leiten:
# Piping to bash works in general
$ echo 'hi'
hi
$ echo "echo 'hi'" | bash
hi
# `read` works directly
$ read -p "input: " var
input: <prompt>
# But not when piping - returns immediately
$ echo 'read -p "input: " var' | bash
$
Anstatt input:
nach einem Wert zu fragen und ihn anzufordern, wird der Lesebefehl einfach von übergeben bash
.
Weiß jemand, wie ich ein Skript mit read
zu bash
leiten kann ?
Die Prozessersetzung macht das, was Sie wollen:
bash <(wget ...)
Trotzdem muss ich Ihre Motivation hier in Frage stellen. Wenn Sie den Webserver steuern (und https verwenden), ist dies möglicherweise sinnvoll. Aber nur ein Skript über das Internet blind auszuführen, ist sehr riskant.
quelle
just running a script from the internet blind is very risky
- Ja, wir wissen, dass es riskant ist, aber die Leute können Skripten bestimmter Organisationen vertrauen. Siehe die Diskussion in den Kommentaren zur Antwort von @ Xen2050.Stimmt etwas nicht mit:
?
quelle
/tmp
viele Programme temporäre Dateien. Ich würde es leid sein, heruntergeladene Skripte sofort auszuführen, ohne vorher einen Blick darauf zu werfen ...