web-dev-qa-db-ja.com

ログイン時にスクリプトを実行する

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

コンピュータにログオンしたときに実行したいファイル "Example.sh"があります。すでにログインしていても問題はありませんが、自動的に実行します。

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

230
MZimmerman6

これに従ってください:

  • Automator.appを起動
  • Applicationを選択
  • ツールバーのShow libraryをクリックします(非表示の場合)
  • Run Shell scriptから)Actions/Utilitiesを追加する
  • スクリプトをウィンドウにコピー&ペーストする
  • 試して
  • どこかに保存してください(例えば、あなたのHOMEにApplicationsフォルダを作ることができます、あなたはyour_name.appを得るでしょう)

  • System Preferences - > Accounts - > Login itemsに行きます。

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

編集:

最近、この回答に対して「良い回答」バッジを獲得しました。私の解決策は単純で実用的ですが、ログイン時に任意のプログラムまたはシェルスクリプトを実行する最もクリーンな方法は、次の場合を除いて @ trisweb's answerで説明されています。 、あなたは双方向性が欲しい

自動化ソリューションを使用すると、次のようなことができます。 automator screenshot login application

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

313
jm666

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>

Programキーの後の<string>を希望のコマンドに置き換えます。

~/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が唯一の選択肢であると考えています。おそらくそれが存在する理由です。

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

  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
36
anubhava