Ein Skript ausführen, geleitet von stdin (Linux/Shell Scripting)
Angenommen ich habe ein Skript: my_script.sh
Anstatt das zu tun,
./my_script.sh
Ich möchte etwas machen wie:
cat my_script.sh | <some command here>
solche, die das Skript ausführt. Ist das möglich?
Den use-case ist, wenn das script, das ich ausführen möchten, ist die Ausgabe von wget oder s3cat, etc. Jetzt Speichere ich es in eine temporäre Datei, ändern Sie die ausführbare Datei, und führen Sie es. Gibt es eine Möglichkeit, es direkt tun?
Sie müssen sehr vorsichtig sein, dies zu tun. Wenn alles, was in Ihrem Skript liest von stdin (zum Beispiel alle Befehle, die den Benutzer auffordert, für die "ja/Nein"), wird es verbrauchen Linien zum Skript, und diese Zeilen werden nicht ausgeführt.
InformationsquelleAutor Switch | 2012-04-01
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nur Rohr, die es zu Ihrem Lieblings-shell, zum Beispiel:
(Die
set -x
macht die shell drucken Sie jede Anweisung ist es zu laufen bevor es läuft, nützlich zum Debuggen, aber es hat nichts zu tun mit dem Problem speziell - nur für demo-Zwecke.)set -x
Teil des Befehls erfüllt und ob es ein integraler Teil der Lösung oder nur ein Beispiel für die Arten von Dinge, die Sie tun können.Geklärt. (Nichts bash-spezifische in es,
set -x
sollten in allen POSIX-shells.)wenn das Skript gibt den shell-Typ mit der "#! " - Kram, dann funktioniert das überschreiben shell-ich leite es an?
Nein, das wird nicht funktionieren, die Hülle, die Sie Rohr zu interpretieren, als einen Kommentar (also gar nicht). Das wird schwierig sein, zu tun, ohne eine temp-Datei. (Oh, und Sie wissen, dass dies (wget ' Ing-Kram und es läuft) ist potenziell wirklich gefährlich, nicht wahr?)
Okay, danke. Und ja, vereinbart, dass es gefährlich ist, wenn die Datei nicht aus einer vertrauenswürdigen Quelle (obwohl es genauso gefährlich wie automatisch speichern in eine Datei und dann ausführen).
InformationsquelleAutor Mat
Den Sie verwenden könnten:
oder:
InformationsquelleAutor Mihai
RVM empfiehlt diese Methode, um führen Sie Ihre installer:
InformationsquelleAutor l0b0