In Gnom-terminal / bash kann, Std Ausgang direkt ausgeführt werden (interpretiert?) Als Befehl?

StackOverflow https://stackoverflow.com/questions/3825554

Frage

Ich habe abgehen nur die Winows Wagen und die gnome-terminal und bash sucht groß, aber ich weiß nicht, wie es zu bekommen zu tun, was ich will, (ich vermute, dass es möglich ist). < br> Kann std Ausgang (z. B. von sed) vorgenommen werden, um einen Befehl auszuführen?
 (Dh. Interpretieren und die Ausgabe als Teil des Skripts Logik ausgeführt werden.)
Ich bin Polling ein Prozess seines Status in bestimmten Zeitintervallen ausgeben, und ich würde es als Motto zu tun.

# dd is already running in another terminal. Its PID is 1234
pgrep -l '^dd$' | sed -n 's/^\([0-9]\+.*\)/sudo watch -n 30 kill -USR1 \1/p'  
# this outputs: sudo watch 30 kill -USR1 1234  

Gibt es eine Short-Cut-Terminal / bash Magie sudo watch 30 kill -USR1 1234 zu laufen? Danke.

War es hilfreich?

Lösung

Sie sollten in der Lage sein, es zu wickeln in $():

$(pgrep ... | sed ...)

Aber warum nicht tun:

while :; do sleep 30; clear; kill -USR1 $(pgrep '^dd$'); done

Andere Tipps

Lassen Sie sich einwickeln in $ (). $ () Weist die Standardausgabe wie eine Umgebungsvariable. Auf einer Linie von selbst läuft dies den gedruckten Befehl.

$(pgrep -l '^dd$' | sed -n 's/^\([0-9]\+.*\)/sudo watch -n 30 kill -USR1 \1/p')

Gerade Rohr der Befehle an sh:

pgrep -l '^dd$' | sed -n 's/^\([0-9]\+.*\)/sudo watch -n 30 kill -USR1 \1/p' | sh

Nur weil diese relativ hoch auf bestimmten Google-Suche kommt, werde ich diese Antwort hinzuzufügen.

Wenn Sie setzen `` um einen Befehl dann wird die Ausgabe in einen String umgeleitet werden, dass, wenn nur für sich allein ist, wird als ein Befehl ausgeführt werden.

Zum Beispiel wird dies laufen 'echo 3':

`echo "echo 3"`

Auch kann dies mit mehreren Schichten arbeitet, zum Beispiel:

``echo "echo echo 3"``

Will echo '3', weil das erste Echo gibt 'Echo Echo 3', das startet ein weiteres Echo, das 'Echo 3' gibt, die ausgeführt wird.

Ich benutze immer das `` statt $ () oder | sh / | bash, weil ich persönlich denke, es ist sauberer innerhalb Skripte aussieht. Aber es funktioniert fast genau wie $ () (Ich glaube nicht, gibt es keine Unterschiede, aber es könnte leichter diejenigen sein).

Eines der Dinge, die Sie mit $ tun können () und `` dass Sie mit nicht tun | bash ist die Zuweisung Variablen. Sie können die Ausgabe speichern und sie dann später ausführen:

azdefvar="`COMMAND_THAT_OUTPUTS_COMMAND`"

Hier ist ein Beispiel:

daboross@DaboUbuntu:~$ date +%T
13:09:20
daboross@DaboUbuntu:~$ azdef="`echo "date +%T"`"
daboross@DaboUbuntu:~$ echo $azdef
date +%T
daboross@DaboUbuntu:~$ $azdef
13:09:45
daboross@DaboUbuntu:~$ echo $azdef | bash
13:09:53

Sie können $ () anstelle von `` in jedem dieser Fälle verwenden.

Die Taste `ist direkt unterhalb der esc-Taste auf den meisten Tastaturen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top