web-dev-qa-db-ja.com

〜/ .bashrcの「アラート」エイリアスを変更します

システム:Lubuntu 14.04 LTS

~/.bashrcで提供されるalertエイリアスを特定の方法で変更できるかどうかを知りたい。これは元のalertです:

# Add an "alert" alias for long running commands.  Use like so:
#   sleep 10; alert
alias alert='notify-send --urgency=low -i "$([ $? = 0 ] && echo terminal || echo error)" "$(history|tail -n1|sed -e '\''s/^\s*[0-9]\+\s*//;s/[;&|]\s*alert$//'\'')"'

デフォルトのエイリアス「アラート」の使用 の機能を説明しています。

そして、これはもちろんxfce4-notifyを実行したときの(ls; alertを使用した)システム上のデフォルトの通知の例であり、もちろん正常に完了します:

01Default-alert

無意味なコマンドasdfgh; alertを実行すると、次のように表示されます。

02Nonsense-command

terminalアイコンは、次の理由でerrorアイコンに置き換えられました。

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

現在のところ、通知には次の2つの項目しかありません。
-「前の」コマンドの成功に応じてterminalまたはerrorのアイコン
-コマンド自体(最初の場合はls、2番目の場合はasdfgh

既存のエイリアスを変更して、次のようなコマンドのテキストaboveを含めることができます。

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

その後、ls; alertおよびasdfgh; alertを実行すると、以下に示す通知が表示されます。

Task finished successfully

Something went wrong

私の質問はこれです:両方の通知に「タスクが完了しました」と表示されますが、terminalアイコンとerrorアイコンのどちらを表示するかを再度決定するのと同じロジックを使用できますコマンドの上に表示されるテキスト文字列を決定するには?したがって、terminalアイコンが表示される場合、テキストは「タスクが完了しました」ですが、errorアイコンが表示される場合、テキストは「何かがうまくいきませんでした!」

5
DK Bose

Tl; dr

これを使って:

alias alert='notify-send --urgency=low -i "$([ $? = 0 ] && (echo terminal; exit 0) || (echo error; exit 1))" "$([ $? = 0 ] && echo Task finished || echo Something went wrong!)" "$(history | sed -n "\$s/^\s*[0-9]\+\s*\(.*\)[;&|]\s*alert\$/\1/p")"'

$?を再度評価するだけでは機能しません。2回目に$?が評価され、最初のコマンド置換($([ $? = 0 ] && echo terminal || echo error) 's)の終了ステータスが含まれるからです(常に0 2つのechosが常に成功するため。これを回避するコツは、同等の終了ステータスで最初のコマンド置換出口を再度作成することです。

$([ $? = 0 ] && (echo terminal; exit 0) || (echo error; exit 1))

この方法で、$?を2回評価して、印刷する文字列を決定できます。

alias alert='notify-send --urgency=low -i "$([ $? = 0 ] && (echo terminal; exit 0) || (echo error; exit 1))" "$([ $? = 0 ] && echo Task finished || echo Something went wrong!)" "$(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$//'\''は少し複雑になっています。これはもっと読みやすいでしょう:

history | sed -n "\$s/^\s*[0-9]\+\s*\(.*\)[;&|]\s*alert\$/\1/p"

したがって、最終コマンド:

alias alert='notify-send --urgency=low -i "$([ $? = 0 ] && (echo terminal; exit 0) || (echo error; exit 1))" "$([ $? = 0 ] && echo Task finished || echo Something went wrong!)" "$(history | sed -n "\$s/^\s*[0-9]\+\s*\(.*\)[;&|]\s*alert\$/\1/p")"'

(exit 0); alertおよび(exit 1); alertを実行してテストできます。

3
kos