OS X Dockからシェルスクリプトを実行しますか?


160

Mac OSXドックから実行するシェルスクリプトを設定するにはどうすればよいですか?ショートカットを作成するだけで、エディターでファイルが開かれるようです。編集のために開くのではなく実行するように指示するためにどこかに設定する必要があるフラグはありますか?


2
アバターのためだけに+1すべきですが、私もこのトピックが好きです。
Matt Bannert 2010

受け入れられた回答を2つ目の回答@Wilcoに切り替えることを検討してください。私はそれがより良い答えだと思います。
グレイ

回答:


190

単一のステップ-「シェルスクリプトの実行」でAutomatorワークフローを作成できます。

次にFile > Save As、ファイル形式を「アプリケーション」に変更します。アプリケーションを開くと、シェルスクリプトステップが実行され、コマンドが実行され、完了後に終了します。

これへの利点は、それはだで実際に行うのは簡単で、あなたは非常に簡単に、その後(STDINに、または引数としてのいずれか)シェルスクリプトの入力に渡し、ユーザー入力(たとえば、ファイルの束を選択する)を取得することができます。

(Automatorは/Applicationsフォルダにあります!)

ワークフローの例


6
@ dbr、GUIボタンプッシャー!:)冗談です、それは良い提案です!
willasaywhat

ええ、それは素晴らしい提案でした:)私は自分のアプリの一部にAutomatorアクションを作成しましたが、このような時でもそれを忘れています:)
Jason Coco

これをnohup、la "nohup / usr / bin / myscript&; disown -a && exit 0"で動作させることはできません。スクリプトを実行してすぐに終了するアプリ/ワークフローが必要です。何か案は?:-)
2010年

3
@martineauあなたがopen -a SomeAppThing.app --args --etc=2それを行うことによってアプリケーションを開くならば、それは集中するはずです。または、Applescript(eg osascript -e 'tell application "Google Chrome" to activate')を使用して焦点を合わせることができます
dbr

1
注:しばらく開いたままになるGUIアプリをスクリプトが起動している場合、アプリが閉じるまで、タスクバーに常に回転している歯車のアイコンが表示されます。回避策の1つは、 `&> / dev / null&`をスクリプトの起動行に追加して、Automatorが待機しないようにすることです。
ewall 2015

50

ターミナルウィンドウが必要ない場合は、シェルスクリプトExampleを作成してファイル名に移動するだけで、実行可能ファイルをアプリケーションにすることができますExample.app/Contents/MacOS/Example。この新しいアプリケーションは他のアプリケーションと同じようにドックに配置して、クリックするだけで実行できます。

注:アプリの名前はスクリプト名と正確に一致する必要があります。したがって、最上位ディレクトリはExample.appであるContents/MacOS必要があり、サブディレクトリ内のスクリプトはと命名されExample、スクリプトは実行可能でなければなりません。

ターミナルウィンドウを表示する必要がある場合は、簡単な解決策はありません。あなたはおそらくApplescriptで何かをすることができますが、それはあまりきれいではありません。


1
シェルスクリプトに引数としてファイルを渡す簡単な方法があるかどうか、たまたま知りませんか?「...で開く」を使用して開いたファイルの場合。
Fuzzy76

9
これを行おうとする人にとっては、アプリの名前はスクリプト名と正確に一致する必要があります。したがってexample.sh.app、それだけではなく、本当にそうでなければなりませんexample.app。これらが一致しない場合、破損したアプリに関する警告が表示されます
Kip

1
明確にするために-私はOSX noobです-例のようにフォルダ構造を作成し、スクリプトファイルを次のように配置しますか?
martineau 2014年

2
@martineauはい、そうです。名前が.appその構造で終わるフォルダーを作成すると、そのフォルダーは実行可能なアプリケーションとして扱われます。Finderでそのフォルダの内容を確認するには、フォルダを右クリックして[パッケージの内容を表示]を選択する必要があります(フォルダをダブルクリックするとアプリケーションが実行されるため)。ターミナルでは、フォルダのように見えます。(Finderでフォルダの名前を.appだけに変更できるかどうかはわかりません。ターミナルで名前を変更する必要があるかもしれません。)
Jeremy Banks

1
私はこれを試したところ、El Capitan(10.11)で「PowerPCアプリケーションがサポートされなくなったため、開けません...」というエラーが表示されました。:Dそれはかなり興味深いです!
AllenH 2015年

26

OSX Mavericksの場合:

  1. シェルスクリプトを作成します。
  2. シェルスクリプトを実行可能にします。

    chmod +x your-shell-script.sh
  3. スクリプトの名前を変更して、.appサフィックスを付けます。

    mv your-shell-script.sh your-shell-script.app
  4. スクリプトをOSXドックにドラッグします。
  5. スクリプトの名前を.shサフィックスに戻します。

    mv your-shell-script.app your-shell-script.sh
  6. Finderでファイルを右クリックし、[情報を見る]オプションをクリックします。
  7. ウィンドウの下部で、ターミナルで開くようにシェルスクリプトを設定します。

ドックでスクリプトをクリックすると、ターミナルウィンドウがポップアップしてスクリプトを実行します。

おまけ:スクリプトが完了したときにターミナルを閉じるにはexit 0、最後に追加して、ターミナル設定をこのSO回答で行うように「正常に終了したらシェルを閉じる」に変更します。


いいですね、これは私にとってはうまくいきました。参考:ステップ7はメニュー項目ではなくファイルを参照しています...
Mike Q

いいね!オープンターミナルでのすべての.sh
iHTCboy 2017

@ stiemannkj1、アプリの実行中にアイコンが表示されますか?とにかくそれを隠す方法はありますか?
パセリエ2017

@Pacerier、申し訳ありませんが、私はもうOSXを使用していません(Linuxに切り替えました:))。Jeremy Bankの回答を試してみてください。..私は、他のアイデアを持っていないと私はOSXを持っていないので、私が試して何もして表示/非表示アイコンを使用してテストや混乱することはできません
stiemannkj1

17

私はこれが古いことを知っていますが、他の人に役立つ場合は:

スクリプトを実行する必要があり、ターミナルをポップアップさせて結果を確認できるようにするには、Abyss Knightが言ったように、拡張子を.commandに変更します。それをダブルクリックすると、ターミナルウィンドウが開いて実行されます。

ただし、オートマトンまたはappleScriptから実行するには、これが必要でした。したがって、これを使用して新しいターミナルを開くには、「シェルスクリプトの実行」から実行したコマンドは「open myShellScript.command」で、新しいターミナルで開きました。


素晴らしい、ありがとう!スクリプトを完了したときにターミナルウィンドウを閉じる方法が、これを完璧なソリューションにしたいと考えるすべての必要性です。
Peter M

1
ターミナルの設定で終了時にウィンドウを閉じるを選択している場合は、exitコマンドをスクリプトに追加すると、必要なものが得られます。
Jason Tholstrup、2011

7

スクリプトが実行可能で、拡張子がない場合は、そのままDockの右側(ドキュメント側)にドラッグできます。エディターを開く代わりに、クリックするとターミナルウィンドウで実行されます。

拡張子(foo.shなど)が必要な場合は、Finderのファイル情報ウィンドウに移動して、その特定のスクリプトのデフォルトアプリケーションを変更します(TextEdit、TextMate、コンピュータに設定されているデフォルトのすべて) .shファイル)をターミナルに送信します。その後、テキストエディタで開くのではなく、単に実行されます。ここでも、Dockの右側にドラッグする必要があります。


1
:これはOS X 10.10 Yosemiteのチャンピオンのように機能します。10.9についてコメントすることはできません
ブライアンアッシュ

1
10.11で動作します。ありがとうございました!
Yassine Imounachen 2016年

10.12でも動作します!おそらく10.9に関する私のコメントは間違っていましたが、セパレーターの下のドックの部分にドラッグすることを確認する必要があることに気付きました。残念ながら、10.9を再テストする方法はありません。
stiemannkj1 2016

Dockに追加する必要はありません。デスクトップから実行できます。ただし、拡張子はありません。それを実行可能にすれば、ダブルクリックすることができます。これは私が見た中で最も簡単なオプションです。
リッチアポダカ

5

このスレッドは役に立つかもしれません:http : //forums.macosxhints.com/archive/index.php/t-70973.html

言い換えれば、.command拡張子を付けて名前を変更するか、シェルを実行するAppleScriptを作成できます。


Snow Leopardでは、スクリプトに.command拡張子を追加すると、スクリプトをダブルクリックするとターミナルで実行されますが、なんらかの理由でそれをドックにドラッグすることはできません。しかし、dbrとJeremyの提案はどちらもうまくいきました。
Jo Liss、

5

joeが述べたように、シェルスクリプトを作成してから、シェルスクリプトを呼び出すためのapplescriptスクリプトを作成すると、これを実現でき、非常に便利です。

シェルスクリプト

  1. お気に入りのテキストエディタでシェルスクリプトを作成します。次に例を示します。

    mono "/Volumes/Media/~Users/me/Software/keepass/keepass.exe"

    (これは、モノフレームワークを使用して、w32実行可能ファイルを実行します)

  2. 私の例では「StartKeepass.sh」のシェルスクリプトを保存します

Appleスクリプト

  1. AppleScriptエディターを開き、シェルスクリプトを呼び出します。

    do shell script "sh /Volumes/Media/~Users/me/Software/StartKeepass.sh" user name "<enter username here>" password "<Enter password here>" with administrator privileges

    • do shell script -外部シェルコマンドを呼び出すapplescriptコマンド
    • "sh ...." -これは、ステップ1で作成したシェルスクリプト(完全パス)です(ダイレクトコマンドを実行することもできます。シェルスクリプトを省略して、ここでモノコマンドを実行することもできます)。
    • user name -特定のユーザーとしてコマンドを実行することをAppleScriptに宣言します
    • "<enter username here> -元のユーザー名(引用符を使用)で置き換えます(例: "josh")
    • password -あなたのパスワードをapplescriptに宣言する
    • "<enter password here>" -「mypass」のように、パスワードを引用符で置き換えます。
    • with administrative privileges -管理者として実行することを宣言します

.APPを作成する

  1. Applescriptをfilename.scptとして保存します。私の場合はRunKeepass.scpt

  2. 名前を付けて保存...あなたのapplescriptとファイル形式をアプリケーションに変更すると、私の場合はRunKeepass.appになります

  3. アプリファイルをアプリフォルダーにコピーする


5

スクリプトエディタで:

do shell script "/full/path/to/your/script -with 'all desired args'

アプリケーションバンドルとして保存します。

スクリプトの効果を得ることが目的であれば、これは問題なく機能します。STDOUTまたはSTDERRは表示されません。


2
「アプリケーションバンドルとして保存」をお勧めします。バンドルはアプリケーションよりもはるかに速く起動します。
e.James、2008年

-3

誰かが書いた...

「.sh」で終わるすべてのファイルをターミナルで開くように設定しました。正常に動作し、実行する各シェルスクリプトの名前を変更する必要はありません。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.