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


9

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

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を使用するこの複雑なエイリアスの違いは何ですか?

このエイリアスはどのような状況で役立ちますか、それともしゃれのために作成されただけですか(使用するようなもの sudo sudo sudo sudo sudo apt-get install

Ubuntu 12.10を使用しています


私が考えることができる唯一のことは、通知をより簡単に作成することです...たぶん?
saiarcot895

@ saiarcot895試しnotify-send Linux Ubuntuてみるとほとんど同じですが、唯一の違いはalertアイコンが表示されることです。しかし、コマンドにsed、tail、historyが含まれている理由がわかりません
登録ユーザー

回答:


8

マニュアルページを使用して、ここで結合されたコマンドが何を行うかについての詳細を取得できます。ここでは、これらのコマンドの目的について少し説明します。

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

これは、最後のコマンドの実行ステータス(成功または失敗)に応じて、ターミナルまたはエラーをエコーします。結果は、アイコンを表示するためのスイッチの値になります。-inotify-send

history|tail -n1

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

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


これらを理解するには、次のことを試してください。

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

..これは端末をエコーします

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

..これはエラーをエコーします

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."

.. コマンドコンボechoで使用$()するための簡単なデモとしてネストされています。


1
そのため、このエイリアスを使用して、コマンドが正常に実行されたか失敗したかをGUIの方法でユーザーに通知できます。
登録ユーザー

はい、それはグラフィカルに使用して成功または失敗した実行の両方について通知しますnotify-send。..最後のコマンドの終了ステータスは、の値がチェックされている$?..I'veは編集でこれを含め...
正確な

7

ここで何が起こっているのかを説明してみましょう:

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緊急度レベル(低、通常、重要)を指定します。

-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の場合、エラーなしでテキスト「terminal」を返します。または、終了コードが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で分離できます。

3.1。sed 's/^\s*[0-9]\+\s*//'先行するすべてのスペースとタブを削除し、その後にすべて数値を追加し、最後のスペースとタブも削除します。

3.2。s/[;&|]\s*alert$//先行する記号; & |、タブ、スペース、単語「アラート」を削除します。

シンボルから最後に実行されたコマンドをクリーンにし、最後に「アラート」という単語を追加しただけです。

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

echo "Hello alert" | alert

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


3

現在の答えは、アラートの内部動作がどのように機能するかを説明していると思います(これは私が好奇心から見つけたかったものであり、ここに私を導いた)。しかし、元のOPは、その宣言の上の表彰から理解できるように説明しようとする、それが何のために役立つかを求めていると思います。

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

これから<command>; alert、コマンドをコマンドに置き換える場所として使用する必要があることがわかります。個人的には、定期的に失敗するため、wgetを使用して毎日ビデオをダウンロードする必要があります。そのため、ダウンロードコマンドにアラートを追加して、失敗したときにすぐに通知されるようにして、続行できるようにします(私のアラートはビープ音が鳴るように変更されています)。


0

その理由はsedtailhistoryそれはあなたが入力したメッセージを取得する必要があるためですがあります。(なんらかの理由で)入力した内容は、どの変数からも直接使用できません。したがって、history入力したすべてのリストtail -n1を取得し、最後に入力したものを取得し、最初に "alert"コマンドを削除するための正規表現を使用する必要があります。

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


アラートは削除されません。通知に残ります。
登録ユーザー

1
「何らかの理由で」と答えた場合、それはあまり良い答えではありません;)
要求14

@Requist:$0コマンドの最初の引数を与える印象を受けたので、その特定のステートメントに「何らかの理由で」追加しました。ただし、エイリアスの場合は異なる場合があります。
saiarcot895 2014
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.