システム: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
を使用した)システム上のデフォルトの通知の例であり、もちろん正常に完了します:
無意味なコマンドasdfgh; alert
を実行すると、次のように表示されます。
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
を実行すると、以下に示す通知が表示されます。
私の質問はこれです:両方の通知に「タスクが完了しました」と表示されますが、terminal
アイコンとerror
アイコンのどちらを表示するかを再度決定するのと同じロジックを使用できますコマンドの上に表示されるテキスト文字列を決定するには?したがって、terminal
アイコンが表示される場合、テキストは「タスクが完了しました」ですが、error
アイコンが表示される場合、テキストは「何かがうまくいきませんでした!」
これを使って:
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つのecho
sが常に成功するため。これを回避するコツは、同等の終了ステータスで最初のコマンド置換出口を再度作成することです。
$([ $? = 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
を実行してテストできます。