it-swarm-ja.com

OSXで特定のアプリを開いたときに実行されるシェルスクリプトを自動化するにはどうすればよいですか?

私は最近、達成しようとしている1つのプロジェクトで轍にぶつかっています。 Automatorを使用していますが、このプロジェクトを正確に実行する方法がわかりません。 Bracketsというスクリプト編集アプリがあります。アプリを開くたびにtty.jsというシェルコマンドが実行されるようにしたいと思います。私が得ることができるどんな助けも素晴らしいでしょう

1
VEDA0095

試すことができるのは、アプリケーションの.appフォルダーに移動し、バイナリの名前を変更して、以前の実行可能ファイルという名前のスクリプトファイル(実行可能ファイルとしてマーク)を作成することです。例えば.

_cd /Applications/Brackets.app/Contents/MacOS
mv Brackets BracketsReal
echo "tty.js" > Brackets
echo "BracketsReal &" >> Brackets
chmod +x Brackets
_

これで、スクリプトとアプリを後で起動するテキストスクリプトが作成されます...

編集

_Appname.app/Contents/MacOS/_フォルダー内のスクリプトがサポートされています。

最初の行_#!/bin/sh_(別名Shebang必須

実際の実行可能ファイルを移動してスクリプトから実行させる手法はwrappingと呼ばれ、MacOS上のGimpやXQuartz(Xorg/X11)などのアプリケーションでも使用されます。

ユーザーが何を達成しようとしているかを正しく理解している場合は、Bracketを実行し、ファイル_tty.js_を自動的に開きます。ただし、不足しているShebangは別として、他の考慮事項が必要です。

BracketsRealを正しくラップするには、Bracketsは次のようになります。

_#!/bin/sh
exec "$(dirname "$0")/BracketsReal"
_

BracketsをBracketsRealに移動したことがないかのように実行する必要があります。

execは、シェルの組み込みコマンドです

_$0_は、システムから実行されたシェルスクリプトに渡される特別な引数です。clickで実行すると、スクリプトへのフルパスになります。 :

_/Applications/Brackets.app/Contents/MacOS/Brackets_

dirnameは、ファイル名のないディレクトリ部分のみを取得するシェルコマンドです。$( )はコマンド置換であり、実行すると次のようになります。

_exec /Applications/Brackets.app/Contents/MacOS/BracketsReal
_

アプリケーションを_/Applications_から他のフォルダーに移動しても、実行する必要があります。

この時点で、BracketsReal(おそらくスクリプト自体)がコマンドラインで引数として開くファイルを受け入れることを確認する必要があります(最終的には特別な構文が必要な場合)引数を受け入れる場合、行は次のようになります:

_exec "$(dirname "$0")/BracketsReal" "/path/to/the/file/tty.js"
_

最後に、ラッパースクリプトに問題があるかどうかを確認するには、ターミナルを開いてラッパーを実行し、ターミナルで次のように入力して貼り付けます。

_/Applications/Brackets.app/Contents/MacOS/Brackets
_

特権または構文エラーがターミナルウィンドウに出力されます。

2
EkriirkE

Keyboard Maestro アプリケーションの起動時にマクロを実行するオプションがあります。

また、 スクリプトにショートカットを割り当てるopen -a Brackets;tty.jsのように、常にそのスクリプトを使用してブラケットを開くこともできます。

0
Lri