ダブルクリックしてOS Xでシェルスクリプトを実行する方法


233

OS Xでのユーザー実行権限を持つシェルスクリプトを持っていますが、それをダブルクリックすると、テキストエディターで開きます。それをダブルクリックして実行するにはどうすればよいですか?

回答:


266
  • まずターミナルで、次のように入力してスクリプトを実行可能にします。

    chmod a+x (yourscriptname)
  • 次に、Finderでファイルを右クリックし、[プログラムから開く]、[その他...]の順に選択します。

  • ここで、ファイルを実行するアプリケーションを選択します。この場合は、ターミナルです。端末を選択できるようにするには、「推奨アプリケーション」から「すべてのアプリケーション」に切り替える必要があります。(Terminal.appアプリケーションは、Utilitiesフォルダーにあります)

  • すべてのファイルをこの拡張子に関連付けてターミナルで実行したくない場合を除いて、「常に開くアプリケーション」をチェックしないでください。

  • [OK]をクリックすると、スクリプトをダブルクリックするだけでスクリプトを実行できるようになります。

おかげで、ターミナルに関連付ける方法がわかりませんでした
。/bin/sh

22
"Utilities"フォルダを確認する必要があることに気づくまで、リストにTerminal.appが見つかりませんでした。うまくいけば、これにより誰かの時間を節約できます。
Glenn Lawrence、

27
OSX 10.8以降では、名前にサフィックスが付いていないサフィックスが付いている実行可能スクリプト.command、デフォルトでFinderから実行可能であり、Finderに開く方法を指示する必要はありません。
mklement0

1
「すべてのアプリケーション」は私が欠けていた設定です...おそらくチェルビムも経験したものです。Glennのコメントについては、ウィンドウの右上隅にある組み込みの検索機能を使用するだけです。アプリの完全な名前(Terminal.appなど)を入力してください。
長老

3
それを行うためのきれいな方法ではありません。スクリプトの名前を.commandファイル拡張子に変更します。
バクサウ2018

227

.commandファイル名拡張子を使用してみましたか?


3
これの方が良い。@Lusの回答では、作業フォルダはスクリプトを開いたときとは異なります。
ロドリゴ

6
コンソールウィンドウなしで「バックグラウンド」タスクを起動する方法はありますか?
ラポ2012年

6
。:現在のディレクトリは、あなたのスクリプトがに位置1ではないかもしれないことに注意してください、右のそれを設定するには、この質問を見てみてくださいstackoverflow.com/questions/59895/...
パベルアレクセエフ

14
引き続き実行権限(chmod +x)が必要ですが、.command拡張機能はすでにターミナルにリンクされています。すばらしい解決策、ありがとう
NorTicUs 2014年

どうやらユーザーはこの方法で端末プログラムと対話することができません-私が間違っていない限り?
Demis

153

OSX 10.10(Yosemite)以降およびOS X 10.8(Mountain Lion)以降、Finderから実行可能スクリプト開いた(ダブルクリックした)ときの動作は次のとおりです。

  • 接尾辞なしまたは接尾辞 付きの実行可能スクリプト[1].command
    • されて実行され、デフォルトでは- 何の設定は必要ありません
      • スクリプトが実行される新しいターミナルウィンドウが開きます。
      • デフォルトでは、ウィンドウが残ります開いて、あなたができるようにスクリプトが終了した後、出力を検査(その時点でスクリプトを実行したシェルが終了したとかかわらず、あなたができない相互作用はもはやそれを)。
        ただし、ターミナルPreferences... > Profilesを使用すると、スクリプトが終了したときにウィンドウを自動的に閉じるように選択できます。
    • 警告作業フォルダーは常に現在のユーザーのホームフォルダーであり、スクリプトが置かれているフォルダーではありません。
      • シェルスクリプトを、それが配置されているフォルダーに変更するには、
        • cd -- "$(dirname "$BASH_SOURCE")" シバン線の直後
        • または、あなたは、POSIXに準拠したままにしなければならない場合cd -- "$(dirname "$0")"
        • シンボリックリンクされたスクリプトの真のソースディレクトリを見つけるなどのエッジケースについては、私の答えを参照してください。
    • スクリプトが予期せ実行できない場合
      • chmod +x <script>ターミナルで実行して実行可能にします。そうでない場合は、次の症状が見られます。
      • .command:Finderは、を介して問題を修正できることを示唆する誤解を招くエラーメッセージを表示しますがFile > Get Info、これは真実ではありません- chmod +x上記の方法を使用してください。
      • 接尾辞なし:
        • シェバング行(例えば、#!/bin/bash):接尾辞であるかのように振る舞いがある.sh-以下を参照してください。
        • シェバング行:(デフォルトではテキストエディットである)あなたのデフォルトのテキストエディタで開きます。
  • 実行可能かどうかにかかわらず、サフィックスが付いた.shスクリプト:
    • されているために開かれた編集TextEdit.appインストールされている場合に、またはXcode.app
  • 接尾辞付きの.scptスクリプトまたは.applescript(それ自体が実行可能としてマークされている場合でも、通常はそうではありません):
    • 編集用に開いた[Apple]Script Editor
    • ことを注意JXAソースコードファイルが明確な接尾辞(まだ)を持っていないように見えます。
  • 実行可能かどうかにかかわらず、(実際にはあらゆる種類のファイルに適用されます)カスタムサフィックス(まだシステムで認識されていないサフィックス)が付いスクリプト:
    • プロンプトあなたはそれらを開くためのアプリのために、あなたがたときに最初にそれらを開くと、その選択を覚えています

[1] 実行可能ファイルとは、実行可能アクセス権ビットが設定されたスクリプトと呼び出し元のユーザー(ファイルの所有権に関連)であり、実行を許可される可能性があります。
を使用chmod a+xしてすべての許可ビットを設定する場合(これは一般的です)、誰でもそれを呼び出すことができます(読み取り許可ビットとファイルの所有権に基づいてファイルの読み取りも許可されている場合)。


1
手動でプロファイルをいじるのではなくosascript.commandファイル内に含めることができる単純なスクリプトが終了したときに、開いているターミナルウィンドウを閉じることができます。
l'L'l

@ I'L'I:osascript -e '...'スクリプトの最後にコマンドを追加するということですか?特定のコマンドとは何ですか?また、スクリプトが最前面のタブで実行されていない場合でも、右のタブが確実に閉じられるようにしていますか?
mklement0 2016年

5
@ mklement0:はい、私はそれを数分以上テストしていませんが、基本的なアイデアは.commandスクリプトの最後の行に含めるosascript -e 'tell application "Terminal" to close front window' > /dev/null 2>&1 &ことです: ...すべてのシナリオで機能しない可能性がありますが、 endは本当に重要です—そうでない場合、osascriptは簡単に適応できます(たとえば、それが端末のデフォルトの動作である場合は、ウィンドウタブに変更する必要がある場合があります)。
l'L'l

.commandプロファイル設定にもかかわらず、スクリプトファイルが実行された後、ターミナルウィンドウ/タブを閉じさせないことは可能ですか?
Cyber​​Mew 2018

@Cyber​​Mew:スクリプトを変更できる場合は、最後にキーストロークを待つコマンドを追加します。たとえば、bashスクリプトの場合read -p 'Press Return to close this window.'は、最後のステートメントとして追加します。
mklement0

38

または、カモノハシを使用してスクリプトから通常のMac OS Xアプリケーションを作成することもできます


これは本当に素晴らしいアプリです。しかし、私はここでいくつかの問題を抱えています。.appファイルに変換するpythonスクリプトがあります。私のスクリプトには、ユーザーが入力(raw_input())を入力する必要がある行が含まれています。.appがこのコード行に到達すると、EOF(ファイルの終わり)エラーがスローされます。それについて私は何ができますか?

1
インタラクティブな端末ではありません。カモノハシは単にスクリプト出力を提示します。双方向通信はありません。
2013

4
または、シェルスクリプトの実行アクションを使用して、AutomatorでOS Xアプリケーションを作成します。
ランギキーン2015

15

簡単な方法は、拡張子を.command拡張子なしに変更することです。

しかし、それによってターミナルが開き、ターミナルを閉じる必要があります。出力を表示したくない場合は、Automatorを使用して、ダブルクリックやドックへの追加などが可能なMacアプリケーションを作成できます。

  1. Automatorアプリケーションを開く
  2. 「アプリケーション」タイプを選択
  3. [アクション]検索ボックスに「実行」と入力します
  4. 「Run Shell Script」をダブルクリックします
  5. Run右上のボタンをクリックしてテストします。
  6. File > Save アプリケーションを作成します。

ここに画像の説明を入力してください


すごい !このワークフローを自動化して毎日午後1時に実行するにはどうすればよいですか?
iAkshay 2017年

9

Platypusなどのサードパーティアプリを使用する必要はありません。

Script EditorでApple Scriptを作成し、コマンドdo shell script "shell commands"を直接コマンド呼び出しまたは実行可能なシェルスクリプトファイルに使用し、編集可能なスクリプトファイルをどこかに安全に保管してから、エクスポートしてアプリケーションスクリプトを作成します。アプリスクリプトは、ダブルクリックまたはバーフォルダーでの選択によって起動できます。


3
さらに良いことに、Apple Scriptを経由するのではなく、Automatorを使用してシェルスクリプトの実行アクションを直接使用します。
ランギキーン2015

0

RCDefaultAppを使用して、ファイル拡張子でデフォルトを設定することもできます。

http://www.rubicode.com/Software/RCDefaultApp/

潜在的には、.shをiTerm / Terminalなどで開くように設定できます。たとえば、ユーザー実行権限が必要です。

chmod u+x filename.sh

RCDefaultApp prefペイン


0

chmod 774 filename

:bashスクリプトを持つ「filename」という名前のファイルには拡張子がありません

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