web-dev-qa-db-ja.com

ターミナルでコマンドの実行が終了したときに、どのようにしてターミナルでサウンドを再生したり、通知を提供したりしますか?

私は時々Sudo apt-get updateを実行しますが、その処理がいつ完了したかを確認する必要があり、イライラします。とにかく通知ポップアップを提供したり、実行が終了したときにサウンドを再生したりできるので、作業を続けることができますか?

9
Akiva

そのためのスクリプトを少し書きました。スクリプトは github にあります。

インストールガイドは次のとおりです。

Installation

ダウンロード または単にリポジトリのクローンを作成する

 $ git clone [email protected]:c0rp-aubakirov/notify_after_command_executed.git

次に、スクリプトpostexec_notifyのソースを.bashrcに追加します。

git cloneインストールの例を次に示します。

 $ cd ~
 $ git clone [email protected]:c0rp-aubakirov/notify_after_command_executed.git
 $ cd ~/notify_after_command_executed
 $ echo "source $(pwd)/postexec_notify" >> ~/.bashrc

ターミナルを再起動します。再起動後、次のメッセージが表示されるはずです。

preexec.sh is not exist
Trying to download it from github

次に、通知が表示されるかどうかをテストしてみます。

$ sleep 6

不明な点や問題がある場合はお知らせください。

2
c0rp

私はあなたを助けることができない音。ただし、次のようなものを追加した場合

  && notify-send "Task complete."

コマンドを実行すると、右上隅に通知がポップアップ表示されます。必要なパッケージがデフォルトでインストールされていない場合、Sudo apt-get install libnotify-binが取得します。最初のコマンドが正常に完了すると、&&は2番目のコマンドを実行します。

16
Marc

欲しいのはSudo apt-get update; alertです。以下は説明と根拠です。


  • ターミナルから、順番に実行される多くのコマンドをリストできます。したがって、最初に必要なコマンドは長い時間がかかり、次に通知コマンドが必要です。
  • コマンドを順番に実行するには、&&または;のいずれかでコマンドを区切ります。これらには2つの異なる意味があります。command-a && command-bは、command-aが最初に実行され、次に成功した場合、command-bが実行されることを意味します。 command-a; command-bは、最初にcommand-aが実行され、次にcommand-bが実行されることを意味しますcommand-aが成功したかどうか。おそらく、セミコロンが必要です。更新またはアップグレードが正常に終了したかどうかにかかわらず、更新またはアップグレードの実行が停止したときに通知されるようにします。
  • 他の回答者は、音声と画面上のアラートを提案しています。私自身の好みはnotify-sendで、これは2つのパラメーターを取ります:タイトルとコンテンツ:Sudo apt-get update; notify-send update finished(いずれかのパラメーターにスペースが含まれる場合は、それらを引用符で囲みます)。
  • notify-send title contentalertよりもはるかに迅速かつ簡単に入力できます。このエイリアスは、少なくとも一部のバージョンのUbuntuでデフォルトでbashに組み込まれ、自分のものがない場合は簡単に追加できます(type alertを使用して存在するかどうかを確認します)。あなたは応答を得るはずです、

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

    これは、単に最後のコマンドを引き出してnotify-sendに送信し、付随するアイコンが端末のイメージ(コマンドが成功した場合)またはエラーイメージ(コマンドが失敗した場合)になることを意味します。

    人生はさらにシンプルになりました:command; alertは非常に迅速かつ簡単に入力できます。コマンドが成功したかどうかを警告し、アラートにはコマンドが成功したかどうかの表示が含まれます。

ちなみに、出力をnotify-sendにパイプで送ることができないことが時々悩まされるので、それを行うための小さな関数を作成しました。

notify () 
{ 
    while read input; do
        notify-send -i $(ls /usr/share/icons/gnome/32x32/emotes | sed 's/\(.*\)\..*/\1/' | shuf -n1) "message" "$input";
    done
}

これにより、command | notifyと入力できます。ただし、この場合のアイコンはランダムです。また、出力の各行について通知を受け取りますが、これはおそらくapt-get updateには適していません。

8
TRiG

Aplay互換ファイルの場合

スピーカーからカスタムサウンドを再生するには、次を実行します。

aplay <path_to_sound_file>

* <path_to_sound_file> =サウンドファイルへのパス

選択したサウンドファイルを再生します。 playsoundエイリアスを~/.bashrcに追加できます:

alias playsound='aplay <path_to_sound_file>'

* <path_to_sound_file> =サウンドファイルへのパス

これにより、Sudo apt-get update && playsoundの実行が終了したときに、Sudo apt-get updateを実行して、選択したサウンドを再生できます。

非aplay互換ファイル(例:.oggファイル)(システムサウンド)

スピーカーからカスタムサウンドを再生するには、次を実行します。

pacmd list-sinks | grep -E 'index|device.product.name'

すべてのpulseaudioの使用可能なシンクのインデックスを、対応するデバイスとともに一覧表示するその後、実行できます

pacmd play-file /usr/share/sounds/ubuntu/stereo/bell.ogg <sink_index> > /dev/null

* <sink_index> = pulseaudioのシンクのインデックス

選択したシンクを介して/usr/share/sounds/ubuntu/stereo/bell.oggを再生します。 (もちろん、必要なサウンドを再生できます); playsoundエイリアスを~/.bashrcに追加できます:

alias playsound='pacmd play-file /usr/share/sounds/ubuntu/stereo/bell.ogg <sink_index> > /dev/null'

* <sink_index> = pulseaudioのシンクのインデックス

これにより、Sudo apt-get update && playsoundの実行が終了したときに、Sudo apt-get updateを実行して、選択したサウンドを再生できます。

3
kos

次のようなものを追加できます

&& echo -e "\007"

行末まで。やってみて

Sudo apt-get update && Sudo apt-get -y upgrade && echo -e "\007"

役立つことを願っています

1
Terrance