私のコンピューターのアカウントにログインしたときに、誰かが.shファイルの実行を手伝ってくれるかどうか疑問に思っています。Mac OS X 10.6.7を実行しています。
コンピューターにログオンしたときに実行する "Example.sh"ファイルがあります。すでにログインしている場合は問題なく実行できますが、これを自動的に実行したいのですが。
ログインシェルファイルに追加するように言われていますが、どこにあるかわかりません。助けてください。
私のコンピューターのアカウントにログインしたときに、誰かが.shファイルの実行を手伝ってくれるかどうか疑問に思っています。Mac OS X 10.6.7を実行しています。
コンピューターにログオンしたときに実行する "Example.sh"ファイルがあります。すでにログインしている場合は問題なく実行できますが、これを自動的に実行したいのですが。
ログインシェルファイルに追加するように言われていますが、どこにあるかわかりません。助けてください。
回答:
これに従ってください:
Automator.app
Application
Show library
ツールバーをクリックします(非表示の場合)。Run shell script
(からActions/Utilities
)(あなたが作ることができ、たとえばどこかに保存しApplications
、あなたのホームフォルダを、あなたが取得しますyour_name.app
)
に行くSystem Preferences
-> Accounts
->Login items
編集:
私は最近、この回答に対して「グッドアンサー」バッジを獲得しました。私のソリューションはシンプルで機能しますが、対話時に必要でない限り、ログイン時にプログラムまたはシェルスクリプトを実行する最もクリーンな方法は@triswebの回答に記載されています。
オートマトンソリューションを使用すると、次のようなことができます。
したがって、スクリプトを実行するか、アプリを終了するか、パスワードを要求するか、ログイン時に他のオートマトンワークフローを実行するか、ログイン時にアプリケーションを条件付きで実行するかなどです。
tl; dr:OSXのネイティブプロセスランチャーおよびマネージャーを使用しlaunchd
ます。
そのためには、launchctl
デーモンを作成します。スクリプトのすべての側面を完全に制御できます。一度実行するか、デーモンとして存続させることができます。ほとんどの場合、これが方法です。
.plist
に従ってファイルを作成してください。~/Library/LaunchAgents
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が唯一のオプションであると思います。それがおそらくその理由です。
launchctl
、ほとんどの場合、はるかに優れており、スクリプトの実行に関するあらゆる側面をより詳細に制御できます。それは、「launchdが存在するときに、なぜ能力の低いメソッドを使用するのか」という意味です。(私が最初の文を変更して、私がこの状況でこれらを個人的に推奨しないことを示すことに注意してください)。
login.sh
$ HOMEフォルダーにシェルスクリプトを作成します。
次の1行のスクリプトをスクリプトエディターに貼り付けます。
シェルスクリプト「$ HOME / login.sh」を実行
次に、それをアプリケーションとして保存します。
最後に、アプリケーションをログイン項目に追加します。
スクリプト出力を視覚的にしたい場合は、ステップ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
Go to System Preferences -> Accounts -> Login items
、このアプリケーションの非表示ボックスをチェックします。
~/Library/LaunchAgents
フォルダを確認しましたか?