ログイン時にスクリプトを実行するmac [終了]


280

私のコンピューターのアカウントにログインしたときに、誰かが.shファイルの実行を手伝ってくれるかどうか疑問に思っています。Mac OS X 10.6.7を実行しています。

コンピューターにログオンしたときに実行する "Example.sh"ファイルがあります。すでにログインしている場合は問題なく実行できますが、これを自動的に実行したいのですが。

ログインシェルファイルに追加するように言われていますが、どこにあるかわかりません。助けてください。


3
これは主題外ではありません...私のEmacsデーモンを開始するためにそれが必要でした;)ところで、最良の答えはLingon Xアプリの私見です。
HappyFace 2018年

1
これがトピックから外れていてもかまいません。それは私がインターネットで見つけた最良の答えであり、尊敬に値します。私が初めて解決策を探している他の人にとってはそれを無視しましたが、それは大きな間違いでした!
Sethmr

回答:


378

これに従ってください:

  • 開始 Automator.app
  • 選択する Application
  • Show libraryツールバーをクリックします(非表示の場合)。
  • 追加Run shell script(からActions/Utilities
  • スクリプトをコピーしてウィンドウに貼り付けます
  • 試して
  • (あなたが作ることができ、たとえばどこかに保存しApplications、あなたのホームフォルダを、あなたが取得しますyour_name.app

  • に行くSystem Preferences-> Accounts->Login items

  • このアプリを追加
  • テストして完了;)

編集:

私は最近、この回答に対して「グッドアンサー」バッジを獲得しました。私のソリューションはシンプルで機能しますが、対話時に必要ない限り、ログイン時にプログラムまたはシェルスクリプトを実行する最もクリーンな方法は@triswebの回答に記載されています

オートマトンソリューションを使用すると、次のようなことができます。 オートマトンスクリーンショットログインアプリケーション

したがって、スクリプトを実行するか、アプリを終了するか、パスワードを要求するか、ログイン時に他のオートマトンワークフローを実行するか、ログイン時にアプリケーションを条件付きで実行するかなどです。


2
@GregMiernicki LOL、おはよう...;)ほぼ1年前に私の回答に編集が追加されました。ただし、XML(plist)ファイルの作成は多くのユーザーにとってユーザーフレンドリーではないため、これは平均的なユーザーにとっては少し単純です。とにかく-コメントをありがとう。;)
jm666 2013年

4
@GregMiernickiと忘れないでください。Automatorソリューションを使用すると、インタラクティブなログインスクリプトを作成できます。世界は黒または白だけではありません-少なくとも、それはシマウマのようです... :) :)
jm666

2
@Cupidvogelログイン時にデーモンを実行することは、launchdソリューションの仕事です-triswebの回答を参照してください。Pythonデーモンを管理できる場合は、再起動のすべての側面を管理できるplist構成ファイルなどを確実に管理できます...
jm666

3
他の回答を最もクリーンであると指摘してくれた称賛。それは良い市民権バッジを得るはずです:)。
studgeek 2016

2
すばらしい答え。システムの起動時に「composer global update」のようなコマンドを実行する場合は、スクリプトの最初でPATH = / usr / local / bin:$ PATHをエクスポートしてください。
レオナルド

377

tl; dr:OSXのネイティブプロセスランチャーおよびマネージャーを使用しlaunchdます。

そのためには、launchctlデーモンを作成します。スクリプトのすべての側面を完全に制御できます。一度実行するか、デーモンとして存続させることができます。ほとんどの場合、これが方法です。

  1. こちらのApple Devドキュメントまたは以下の詳細.plistに従ってファイルを作成してください
  2. に置く ~/Library/LaunchAgents
  3. ログイン(またはを介して手動で実行launchctl load [filename.plist]

詳細についてlaunchd、ウィキペディアの記事は非常に優れており、システムと、他の古いシステムに対するその利点について説明しています。


次に、ログイン時にスクリプトを実行するための特定のplistファイルを示します

OSX El Capitan以降の2017/09/25更新(JoséMessias Jrへのクレジット):

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
   <key>Label</key>
   <string>com.user.loginscript</string>
   <key>ProgramArguments</key>
   <array><string>/path/to/executable/script.sh</string></array>
   <key>RunAtLoad</key>
   <true/>
</dict>
</plist>

<string>プログラムキーの後ろを目的のコマンドに置き換えます(そのコマンドで参照されるスクリプトchmod a+x /path/to/executable/script.shはすべて、実行可能でなければならないことに注意してください。すべてのユーザーを対象とするためです)。

名前を付けて保存 ~/Library/LaunchAgents/com.user.loginscript.plist

実行launchctl load ~/Library/LaunchAgents/com.user.loginscript.plistしてログアウト/ログインし、テストする(または直接テストする場合はを実行するlaunchctl start com.user.loginscript

テール/var/log/system.logエラーメッセージの。

重要なのは、これがユーザー固有のlaunchdエントリであるため、指定されたユーザーのログイン時に実行されることです。システム固有の起動デーモン(に配置/Library/LaunchDaemons)は、ブート時に実行されます。

すべてのユーザーのログイン時にスクリプトを実行したい場合は、LoginHookが唯一のオプションであると思います。それがおそらくその理由です。


4
はい。FWIW私はこのブログが同じテクニックで役立つと感じました:developernotes.com/archive/2011/04/06/169.aspx
Daniel James

8
あなたはAutomatorアクションについて何が疑わしいのか、そしてなぜそれらが「推奨されない」のかについて言及することを怠っています。
マイクキャンベル

4
:ここにlaunchctl VSフォルダアクションについての良い概要ですapple.stackexchange.com/a/63731/38290 -そしてLoginHookの限界の1程度別(一つだけのスクリプトを許可) - superuser.com/a/377401が。どちらかというと、疑わしい、または貧弱な方法であるというわけではありませんがlaunchctl、ほとんどの場合、はるかに優れており、スクリプトの実行に関するあらゆる側面をより詳細に制御できます。それは、「launchdが存在するときに、なぜ能力の低いメソッドを使用するのか」という意味です。(私が最初の文を変更して、私がこの状況でこれらを個人的に推奨しないことを示すことに注意してください)。
trisweb 2013年

3
ユーザーがログインしたときに毎回何が実行されるLaunchDaemon plistを作成するのでしょうか。。つまり、システムの起動時ではなく、ユーザーがログインするたびに(ログアウト-ログインサイクルで試行します)。上記の(あなたが間違っている)オートマトンソリューションをlaunchctlで実装する方法を(bla-blaだけでなく)正確に示していただけますか?
cajwine 2013年

9
/ Library / LaunchAgents /内のPlistファイルは、ログイン時に、ログインしたユーザーのIDで実行されます。/ Library / LaunchDaemons /内のPlistファイルは、ブート時にルートとして実行されます(IDはユーザーキーで変更できます)。
ベイン、

42
  1. login.sh$ HOMEフォルダーにシェルスクリプトを作成します。

  2. 次の1行のスクリプトをスクリプトエディターに貼り付けます。

    シェルスクリプト「$ HOME / login.sh」を実行

  3. 次に、それをアプリケーションとして保存します。

  4. 最後に、アプリケーションをログイン項目に追加します。

スクリプト出力を視覚的にしたい場合は、ステップ2をこれと入れ替えることができます。

tell application "Terminal"
  activate
  do script "$HOME/login.sh"
end tell

複数のコマンドが必要な場合は、次のようなものを使用できます。

tell application "Terminal"
  activate
  do script "cd $HOME"
  do script "./login.sh" in window 1
end tell

1
私はこれをリンクしました、コマンドラインインストーラーが欠けている唯一のもの;)
sorin

1
素晴らしい解決策。「ログイン」ウィンドウを非表示にするにはどうすればよいですか?ログイン項目をチェックしてみました。
xgdgsc 2013

1
@xgdgsc:移動してGo to System Preferences -> Accounts -> Login items、このアプリケーションの非表示ボックスをチェックします。
anubhava 2013

1
@anubhavaすでに述べたように、このログインアプリケーションの非表示ボックスはすでにオンになっています。しかし、それでも表示され、コンピューターをシャットダウンするときに強制的に終了する必要があります。
xgdgsc 2013

2
@xgdgsc:わかりました、~/Library/LaunchAgentsフォルダを確認しましたか?
anubhava 2013
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.