私が書いたAppleScriptとシェルスクリプトの10.8の通知センター機能を利用できるようになりたいです。
AppleScriptまたはシェルスクリプトのいずれかから使用できる組み込みコマンドまたはサードパーティライブラリはありますか?
理想的には、通知の種類とアイコンを制御できますが、ストックアイコン(ただしカスタムテキスト)を使用して基本的なバナーをトリガーする機能さえあれば十分です。
私が書いたAppleScriptとシェルスクリプトの10.8の通知センター機能を利用できるようになりたいです。
AppleScriptまたはシェルスクリプトのいずれかから使用できる組み込みコマンドまたはサードパーティライブラリはありますか?
理想的には、通知の種類とアイコンを制御できますが、ストックアイコン(ただしカスタムテキスト)を使用して基本的なバナーをトリガーする機能さえあれば十分です。
回答:
Mavericks以降では、AppleScriptの「表示通知」を使用してこれを行うことができます。
display notification "Lorem ipsum dolor sit amet" with title "Title"
それだけです。文字通りシンプルです!いいえ3 番目のパーティのライブラリやアプリケーションは必要ありませんし、他のシステムで使用するために完全に移植です。上部に10.9通知、中央に10.10 DP、下部に10.10通知。
AppleScriptは、/ usr / bin / osascriptを使用してシェルから実行できます。
osascript -e 'display notification "Lorem ipsum dolor sit amet" with title "Title"'
追加してアラートをさらにカスタマイズすることもできます…
字幕
'subtitle'の後に、サブタイトルを含む文字列または変数を追加します。
display notification "message" with title "title" subtitle "subtitle"
上記の例では、次の通知が生成されます。
音
「サウンド名」の後に、通知とともに再生されるサウンドの名前を追加します。
display notification "message" sound name "Sound Name"
有効なサウンド名は…にあるサウンドの名前です
~/Library/Sounds
/System/Library/Sounds
投稿通知は、コマンドラインスクリプトとしてラップできます。次のコードはターミナルで実行でき、/ usr / local / binにスクリプトを追加します(存在する必要があり、$ PATHに追加しnotify
ます)。
cd /usr/local/bin && echo -e "#!/bin/bash\n/usr/bin/osascript -e \"display notification \\\"\$*\\\"\"" > notify && chmod +x notify;cd -
これは、上記が通知のために追加するスクリプトです。
#!/bin/bash
/usr/bin/osascript -e "display notification \"$*\""
通知を表示するには:
notify Lorem ipsum dolor sit amet
sleep 5; notify Slow command finished
display notification
は、クリックするとファイルを開くダイアログが表示されることです。
"display ... '$mytext' ..."
、エスケープされた二重引用符が必要です "display notification \"$mytext\" ..."
。
READMEから:
terminal-notifierは、Mac OS X 10.8で利用可能なMac OS Xユーザー通知を送信するコマンドラインツールです。
NSUserNotification
「Foundationツール」では機能しないため、現在アプリケーションバンドルとしてパッケージ化されています 。レーダー:// 11956694このツールは、ファイルシステムの変更により実行されるコマンドのステータスを表示するために、Kickerによって使用されます。(v3.0.0)
ダウンロード
コード署名済みですぐに使用できるビルド済みのバイナリは、ダウンロードセクションから入手できます。
使用法
$ ./terminal-notifier.app/Contents/MacOS/terminal-notifier group-ID sender-name message [bundle-ID]
terminal-notifierを使用するには、アプリバンドル内のバイナリを呼び出す必要があります 。
最初の引数は、通知が属する「グループ」を指定します。「グループ」については、以前に投稿された通知を置き換えて、1つの通知のみが表示されます。例:一意のプロセスによって通知をスコープする送信者のプロセスID、またはプロジェクトによる通知をスコープする現在の作業ディレクトリ。
2番目と3番目の引数は通知自体を説明し、それぞれ「タイトル」と「メッセージ」です。たとえば、通知の送信者をユーザーに通知するには、送信者の名前をタイトルとして指定できます。
4番目と最後の引数はオプションです。ユーザーが通知をクリックしたときにアクティブにするアプリケーションを指定します。デフォルトでは、これはTerminal.appをアクティブにし、代わりにアプリケーションのバンドル識別子を指定して別のアプリケーションを起動します。たとえば、Safari.appを起動するには次を使用します
com.apple.Safari
。
多くの人がボタンをクリックすることでのみ却下できる通知ポップアップを望んでいることを知っているので、@ grgarsideの回答にメモを追加したいだけです。
私はあなたのための解決策を見つけました:
実際には、記述されたスクリプトのパラメーターではなく、システム設定の設定によって制御されていました。これらの2つの画像はそれをすべて説明する必要があります
すばらしい回答をありがとう@grgarside。
Script Editor
だけのためであるScript Editor.app
とosascript
。サービスワークフローでは、Automator Runner
です。ときに内部のAutomator.app
、それはですAutomator
。
これをGrowl2(App Storeから入手可能)で行うことができます。Growlをインストールし、「OS X通知」を有効にします(スクリーンショット)
さらに、コマンドラインツール用にGrowlNotifyをインストールして、Growl通知を送信する必要があります。このツールは、ダウンロードページから無料でダウンロードできます。
これで、コマンドラインからGrowl通知を生成でき、通知センターに転送されます。例えば:
growlnotify -n "My App" -m "Hello world"
現在、アプリケーションアイコンを変更することはできないようです。
--icon path/to/icon.png
アイコンのオプションを使用できる可能性があると思います。
私は最近、ターミナルノーティファイアを分岐して、通知アラート(アクション付き)と返信タイプアラートを表示するコマンドラインツールを構築しました。
シェルスクリプトとgolangアプリで使用して、ユーザーからインタラクティブな回答を得ます。
@grgarsideのソリューションは優れていますが、スクリプトインジェクションに対して脆弱です。これは、ログファイルの内容などを表示するためにこれを使用すると、重大なセキュリティ問題になる可能性があります。
これはより安全なはずです:
#!/bin/bash
X="$*" /usr/bin/osascript -e 'display notification system attribute "X"'
I have a "laser"
あなたの「単語」を「引用する」ことによって構文エラーがあると言われることなく何かを言いたいだけかもしれません。エスケープでは、次のことができますscript 'I have a "laser"'
Growlは無料ではなく、10.8より前のシステムではterminal-notifierを使用できないため、cocoaDialogを使用する傾向があります。これは無料のオープンソースなので、スクリプトとともに配布することもできます。
多くのカスタマイズが必要ない場合は、AppleScriptを使用することもできます。AppleScript display notification
は、他の人が既に述べたように、シェルから呼び出すこともできます。
ただし、AppleScriptは二重引用符を必要とすることに注意してください。したがって、変数が必要な場合、これは機能しません:
osascript -e "display notification '$text' with title '$title'" #WRONG
エスケープされた二重引用符を使用する必要があります。これはいですが、動作します:
osascript -e "display notification \"$text\" with title \"$title\""
osascript -e 'display notification "Lorem ipsum dolor sit amet" with title "Title"'
(これは、@ grgarsideの優れた答えに基づく代替実装です。)
AppleScriptはosascript
、シェバン行を挿入することで直接解釈できます。
#!/usr/bin/osascript
on run argv
if length of argv = 1 then
display notification (item 1 of argv) with title "Notification"
else if length of argv > 1 then
display notification (item 1 of argv) with title (item 2 of argv)
else
return "<message> is required\nUsage: notify <message> [<title>]"
end if
end run
これをnotify
パスのどこかに保存します(例:)、/usr/local/bin/notify
実行可能にします(chmod +x notify
)。メッセージとオプションのタイトルを受け入れます。いずれかに空白がある場合は、引用符で囲み、シェルがそれを単一の引数として解釈するようにします。
$ notify "Lorem ipsum dolor sit amet" "Testing Notifications"
OS Xのrubyスクリプトで使用しているクールなものを次に示します(ウィンドウから切り替えた後でもスクリプトを開始して更新を取得できるようにするため)。
cmd = %Q|osascript -e 'display notification "Server was reset" with title "Posted Update"'|
system ( cmd )
公式文書
ドキュメントが移動または削除された場合に備えて、ここにテキストをコピーします。
通知を表示するには、表示通知コマンドに表示する文字列を指定します。オプションで、with title、subtitle、および音名パラメーターの値を指定して、通知が表示されたときに追加情報と音声アラートを提供します
display notification "All graphics have been converted." with title "My Graphic Processing Script" subtitle "Processing is complete." sound name "Frog"
注意
スクリプトを使用して通知を表示した後、スクリプトまたはスクリプトエディター(スクリプトがスクリプトエディター内から実行されている場合)が[システム環境設定]> [通知]の通知アプリのリストに追加されます。そこで、通知をアラートまたはバナーとして表示するかどうかなどのオプションを構成できます。
アラートスタイルの通知で[表示]ボタンをクリックすると、通知を表示したアプリが開きます。スクリプトアプリの場合、アプリを再度開くと、スクリプトの実行ハンドラーがトリガーされ、スクリプトが2回目の処理を開始する可能性があります。これを念頭に置いて、必要に応じてこのシナリオを処理するスクリプトにコードを追加してください。
ありがとう、これはユーザースクリプトに必要なものでした。サブタイトルとサウンドを追加するために少し変更を加えました。値が提供されない場合、無視されます。
function _sys_notify() {
local notification_command="display notification \"$2\" with title \"$1\" subtitle \"$3\" sound name \"$4\""
osascript -e "$notification_command"
}
alias sys-notify="_sys_notify $1 $2 $3 $4"
サウンドには、/ System / Library / Soundsの拡張子なしのサウンドファイル名を使用します。たとえば、ファイルPing.aiffを使用するには、Pingを4ドルで使用します