私はかつてこれを行う方法を知っていましたが... unixでのログイン時にスクリプト(bashはOK)をどのように実行しますか?
11 に答える
ウィキペディアから
Bash が起動すると、さまざまなスクリプトでコマンドが実行されます。
Bash が対話型ログイン シェルとして呼び出されると、最初にファイル /etc/profile からコマンドを読み取り、実行します (そのファイルが存在する場合)。そのファイルを読み取った後、~/.bash_profile、~/.bash_login、および ~/.profile をこの順序で検索し、最初に存在して読み取り可能なコマンドからコマンドを読み取って実行します。
ログイン シェルが終了すると、Bash はファイル ~/.bash_logout (存在する場合) からコマンドを読み取り、実行します。
ログイン シェルではないインタラクティブ シェルが開始されると、Bash は ~/.bashrc ファイルが存在する場合はそこからコマンドを読み取り、実行します。これは、 --norc オプションを使用することで抑制できます。--rcfile file オプションを指定すると、Bash は ~/.bashrc ではなくファイルからコマンドを読み取って実行するようになります。
ログイン時に、ほとんどのシェルは、カスタム スクリプトの実行に使用できるログイン スクリプトを実行します。シェルが実行するログイン スクリプトは、もちろんシェルに依存します。
- bash: .bash_profile、.bash_login、.profile (後方互換性のため)
- sh: .profile
- tcsh および csh: .login
- zsh: .zshrc
おそらく、次のようにして、使用しているシェルを見つけることができます
echo $SHELL
プロンプトから。
「ログイン」のもう少し広い定義については、X の起動時にほとんどのディストリビューションで、X セッションの開始時に .xsessionrc が実行されることを知っておくと便利です。
Bash を使用する場合、最初の~/.bash_profile
と~/.bash_login
が~/.profile
対話型ログイン シェルに対して実行されます。~/.profile
通常、Bash 以外の Unix シェルで実行されると思います。Bash は~/.bashrc
非ログイン インタラクティブ シェルに対して実行されます。
私は通常、常に設定したいものをすべて入れ.bashrc
て から実行します。また.bash_profile
、 の設定ssh-agent
や実行など、ログインしているときにのみ実行する必要があるものもいくつか設定しますscreen
。
スクリプトを1つだけ実行したい場合は、そのユーザーのデフォルト シェルにすることができます。
echo "/usr/bin/uptime" >> /etc/shells
vim /etc/passwd
* username:x:uid:grp:message:homedir:/usr/bin/uptime
興味深い効果をもたらす可能性があります:)(安全ではないので、あまり信頼しないでください。デフォルトのシェルをドライブを消去するスクリプトに設定するようなものではありません。...しかし、..驚くほど便利です)
bash プロファイルに配置します。
~/.bash_profile
OSX を使用している場合は、~/.profile
私はこの問題に何日も悩まされました。ubuntuでは何も機能しませんでした。/etc/profile に呼び出しを入れると、ログイン試行時にすべてクラッシュしました。「スタートアップアプリケーション」は、私が望んでいたものではなかったため、使用できませんでした。これは、その現在のユーザーのスクリプトのみを設定します。
最後に、この小さな記事を見つけました: http://standards.freedesktop.org/autostart-spec/autostart-spec-0.5.html
解決策は次のとおりです。
$XDG_CONFIG_DIRS パスを見つけます。
echo $XDG_CONFIG_DIRS
スクリプトをそのディレクトリに配置します
Launchd
OS Xで推奨される方法です。
ログイン時に実行したい場合は、それを入れてください~/Library/LaunchAgents
開始launchd
項目
launchctl load /Library/LaunchDaemons/com.bob.plist
ストップアイテム
launchctl unload /Library/LaunchDaemons/com.bob.plist
例com.bob.plist
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>com.bob</string>
<key>RunAtLoad</key>
<true/>
<key>ProgramArguments</key>
<array>
<string>/usr/bin/java</string>
<string>-jar</string>
<string>/Users/user/program.jar</string>
</array>
</dict>
</plist>
起動時にどのファイルが読み込まれるかについては、ローカル システムの bash man ページで ^INVOCATION を検索してください。
man bash
/^INVOCATION
また、FILES セクションでは、
~/.bash_profile
The personal initialization file, executed for login shells
~/.bashrc
The individual per-interactive-shell startup file
スクリプトを適切なファイルに追加します。スクリプトが $PATH にあることを確認するか、スクリプト ファイルへの絶対パスを使用します。
/etc/profile
スクリプトを実行するエントリを追加します。これは、ログオンするたびに実行されます。これを自分のアカウントに対してのみ行っている場合は、ログイン スクリプトの 1 つ (例: .bash_profile
) を使用して実行します。
スクリプト~/.bash_profile
はログイン時に実行されます。