1

Winowsワゴンを降りたばかりで、gnome-terminalとbashは見栄えが良いですが、自分がやりたいことを実行する方法がよくわかりません(可能だと思います)。
std出力(sedなど)をコマンドとして実行することはできますか?
(つまり、スクリプトのロジックの一部として出力を解釈して実行します。)
プロセスをポーリングして、そのステータスを一定の間隔で出力しているので、ワンライナーとして実行したいと思います。

# 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  

実行するショートカットターミナル/bashマジックはありますsudo watch 30 kill -USR1 1234か?ありがとう。

4

4 に答える 4

1

あなたはそれを包むことができるはずです$()

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

しかし、なぜしないのですか?

while :; do sleep 30; clear; kill -USR1 $(pgrep '^dd$'); done
于 2010-09-29T20:28:13.457 に答える
1

$()でラップします。$()は、環境変数のような標準出力を割り当てます。1行だけで、これは印刷されたコマンドを実行します。

$(pgrep -l '^dd$' | sed -n 's/^\([0-9]\+.*\)/sudo watch -n 30 kill -USR1 \1/p')
于 2010-09-29T20:31:55.263 に答える
1

コマンドを次の場所にパイプするだけshです:

pgrep -l '^dd$' | sed -n 's/^\([0-9]\+.*\)/sudo watch -n 30 kill -USR1 \1/p' | sh
于 2010-09-29T20:32:55.960 に答える
0

これが特定のGoogle検索で比較的高くなるという理由だけで、私はこの答えを追加します。

コマンドの周りに``を置くと、出力は文字列に再ルーティングされます。それだけの場合は、コマンドとして実行されます。

たとえば、これは「echo3」を実行します。

`echo "echo 3"`

また、これは複数のレイヤーで機能します。たとえば、次のようになります。

``echo "echo echo 3"``

最初のエコーは「echoecho3」を生成し、別のエコーを起動して「echo 3」を実行するため、「3」をエコーし​​ます。

個人的にはスクリプト内で見た目がすっきりしていると思うので、$()や| sh /|bashの代わりに常に``を使用します。ただし、$()とほぼ同じように機能します(違いはないと思いますが、わずかな違いがある可能性があります)。

$()と``でできることの1つ|ではできないこと bashは変数を割り当てています。出力を保存して、後で実行できます。

azdefvar="`COMMAND_THAT_OUTPUTS_COMMAND`"

次に例を示します。

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

これらの場合は、``の代わりに$()を使用できます。

`キーは、ほとんどのキーボードのescキーのすぐ下にあります。

于 2013-06-05T20:15:29.717 に答える