web-dev-qa-db-ja.com

デフォルトのエイリアス「アラート」の使用

デフォルトのエイリアスAlertはコマンド用です

notify-send --urgency=low -i "$([ $? = 0 ] && echo terminal || echo error)" "$(history|tail -n1|sed -e '\''s/^\s*[0-9]\+\s*//;s/[;&|]\s*alert$//'\'')"

alertを実行すると、テキストアラートと端末アイコンで通知されます。 alert !!!!!のような1つのパラメータで実行すると、テキストAlert !!!!!および!!!!!で通知されます。

では、単純なnotify-sendコマンドと、notify-send、echo、history、tail、sedを使用するこの複雑なエイリアスの違いは何ですか?

どのエイリアスでこのエイリアスが有用か、それとも単にpun用に作成されたのか(Sudo sudo Sudo sudo Sudo apt-get installを使用するようなもの

Ubuntu 12.10を使用しています

8
Registered User

Manページを使用して、ここで組み合わせたコマンドが何をするかについての詳細を取得できます。これらのコマンドの目的について少し説明します。

"$([ $? = 0 ] && echo terminal || echo error)"

これは、実行状態ごとにterminalまたはerrorをエコーし​​ます-successfulまたはfail最後のコマンド;結果は、アイコンを表示するための-inotify-sendスイッチへの値としてです。

history|tail -n1

..最後に実行されたコマンドを取得します。

sedは、テキストを解析してnotify-sendメッセージで表示します。


これらを理解するには、以下を試してください:

true; echo "$([ $? = 0 ] && echo terminal || echo error)"

..これはechoterminalになります。

false; echo "$([ $? = 0 ] && echo terminal || echo error)"

..thisはechoerrorを返します。

notify-send -i terminal 'Please note the icon..' 'the default icon for the terminal has been used. You can specify any other icon of your choice'

そして、

echo $?

..は、最後に実行されたコマンドの終了値を知るのに非常に役立ちます。

echo "$(echo "the output of this command enclosed within \$(...)") is being supplied here in the outer echo command where is used as an argument."

..nested echoは、コマンドコンボで$()を使用するための簡単なデモです。

8
precise

ここで何が起こっているのか説明しよう。

notify-send --urgency=low -i "$([ $? = 0 ] && echo terminal || echo error)" "$(history|tail -n1|sed -e '\''s/^\s*[0-9]\+\s*//;s/[;&|]\s*alert$//'\'')"

1--urgency=low

-u、--urgency = LEVEL緊急度レベル(低、通常、重大)を指定します。

2-i "$([ $? = 0 ] && echo terminal || echo error)"

  -i, --icon=ICON[,ICON...]
         Specifies an icon filename or stock icon to display.

この部分"$([ $? = 0 ] && echo terminal || echo error)"$?は、最後に返されたエラー(または成功)です。そのため、最後のコマンド終了コードが0の場合、エラーなしでテキスト「ターミナル」を返します。または、終了コードが0でない場合、「エラー」を返します。

最後に、「ターミナル」または「エラー」アイコンが表示されます。

$(history|tail -n1|sed -e '\''s/^\s*[0-9]\+\s*//;s/[;&|]\s*alert$//'\'')

history|tail -n1は、履歴から最後のコマンドを返します。

sed -e '\''s/^\s*[0-9]\+\s*//;s/[;&|]\s*alert$//'\'')これは、2ブロックのsedで区切ることができます。

.1。sed 's/^\s*[0-9]\+\s*//'は、先行するすべてのスペースとタブを削除し、その後のすべての数値を削除し、末尾のスペースとタブも削除します。

.2。s/[;&|]\s*alert$//は、先行するシンボルを削除します;&|、タブとスペース、および「アラート」。

これは、シンボルから最後に実行されたクリーンなコマンドであり、最後に「アラート」という単語があります。

したがって、次のようなものを使用する場合:

echo "Hello alert" | alert

前のコマンドでアラートが表示されます。

7
c0rp

現在の答えはhowアラートワークの内部の仕組みを説明していると思います(これは私が好奇心から見つけたいと思ったもので、ここに来ました)。しかし、元のOPはwhatを要求していると思います。これは、その宣言の上の賞賛から理解できるように説明しようとします。

これは基本的に、端末が終了するのを待っている間ずっと端末を見続けることができないときにコマンドが終了したときに警告するために使用されます。コマンド例のとおり、sleep 10; alertはコマンドが成功した場合に端末アイコンでコマンドの通知(この場合はsleep 10)を表示します(スリープ10の完了には10秒かかります)。

これから、コマンドをコマンドに置き換える<command>; alertとして使用する必要があることがわかります。個人的には、定期的に失敗するため、wgetを使用して毎日ビデオをダウンロードする必要があります。したがって、ダウンロードコマンドにアラートを追加するだけで、失敗したときにすぐに通知され、再度続行できるようになります(注意を喚起するためにアラートも変更されます)。

3
chesedo

sedtail、およびhistoryが存在する理由は、入力したメッセージを取得する必要があるためです。 (何らかの理由で)入力したものは、どの変数からも直接利用できません。そのため、historyを使用して入力したすべてのリストを取得し、tail -n1を使用して最後に入力したものを取得し、いくつかの正規表現を使用して最初の "アラート"コマンドを削除する必要があります。

これを拡張するために、$? = 0がtrueであるかどうかをテストする条件付きコマンドがあります。私が伝えることができるものから、それが本当なら、それは端末から来ており、通常のメッセージとみなされるべきです。それ以外の場合は、エラーと見なされ、エラーアイコンが表示されます。

0
saiarcot895