Wie führe ich die Ausgabe eines Befehls in der aktuellen Shell aus?

Mir ist das wohl bewusstsource (aka.) Dienstprogramm, das den Inhalt aus einer Datei entnimmt und innerhalb der aktuellen Shell ausführt.

Jetzt wandle ich Text in Shell-Befehle um und führe sie wie folgt aus:

$ ls | sed ... | sh

ls ist nur ein zufälliges Beispiel, der ursprüngliche Text kann alles sein.sed Auch nur ein Beispiel für die Umwandlung von Text. Das Interessante istsh. Ich pfeife, was ich musssh und es läuft es.

Mein Problem ist, das heißt, eine neue Sub-Shell zu starten. Ich möchte lieber, dass die Befehle in meiner aktuellen Shell ausgeführt werden. So wie ich es machen könntesource some-file, wenn ich die befehle in einer textdatei hätte.

Ich möchte keine temporäre Datei erstellen, da sie sich schmutzig anfühlt.

Alternativ möchte ich meine Sub-Shell mit genau den gleichen Eigenschaften wie meine aktuelle Shell starten.

aktualisieren

Okay, die Lösungen mit Backtick funktionieren auf jeden Fall, aber ich muss dies oft tun, während ich die Ausgabe überprüfe und ändere. Daher wäre es mir sehr lieber, wenn es eine Möglichkeit gäbe, das Ergebnis am Ende in etwas umzuwandeln.

trauriges Update

Ah, das/dev/stdin es sah so hübsch aus, aber in einem komplexeren Fall funktionierte es nicht.

Also, ich habe das:

find . -type f -iname '*.doc' | ack -v '\.doc

Welches sichert alles.doc Dateien haben eine geringere Endung.

Und womit übrigens umgegangen werden kannxargs, aber das ist nicht der Punkt.

find . -type f -iname '*.doc' | ack -v '\.doc

Also, wenn ich das erstere laufen lasse, wird es sofort beendet, nichts passiert.

| perl -pe 's/^((.*)\.doc)$/git mv -f $1 $2.doc/i' | source /dev/stdin

Welches sichert alles.doc Dateien haben eine geringere Endung.

Und womit übrigens umgegangen werden kannxargs, aber das ist nicht der Punkt.

find . -type f -iname '*.doc' | ack -v '\.doc$' | perl -pe 's/^((.*)\.doc)$/$1 $2.doc/i' | xargs -L1 git mv

Also, wenn ich das erstere laufen lasse, wird es sofort beendet, nichts passiert.

| perl -pe 's/^((.*)\.doc)$/$1 $2.doc/i' | xargs -L1 git mv

Also, wenn ich das erstere laufen lasse, wird es sofort beendet, nichts passiert.

| perl -pe 's/^((.*)\.doc)$/git mv -f $1 $2.doc/i' | source /dev/stdin

Welches sichert alles.doc Dateien haben eine geringere Endung.

Und womit übrigens umgegangen werden kannxargs, aber das ist nicht der Punkt.

find . -type f -iname '*.doc' | ack -v '\.doc$' | perl -pe 's/^((.*)\.doc)$/$1 $2.doc/i' | xargs -L1 git mv

Also, wenn ich das erstere laufen lasse, wird es sofort beendet, nichts passiert.

Antworten auf die Frage(9)

Ihre Antwort auf die Frage