web-dev-qa-db-ja.com

* nixでログイン時にスクリプトを実行するにはどうすればよいですか?

私はこれを行う方法を一度知っていますが、... UNIXでのログイン時にどのようにスクリプトを実行しますか(bashは大丈夫ですか)?

68
Nate

wikipedia Bash から

Bashが起動すると、さまざまな異なるスクリプトでコマンドを実行します。

Bashが対話型ログインシェルとして呼び出されると、最初にファイル/ etc/profileが存在する場合、そのファイルからコマンドを読み取って実行します。そのファイルを読み取った後、〜/ .bash_profile、〜/ .bash_login、および〜/ .profileをこの順序で検索し、最初に存在する読み取り可能なコマンドからコマンドを読み取り、実行します。

ログインシェルが終了すると、Bashは〜/ .bash_logoutが存在する場合、ファイルからコマンドを読み取って実行します。

ログインシェルではないインタラクティブシェルが起動されると、Bashは〜/ .bashrcからコマンドを読み取り、実行します(そのファイルが存在する場合)。 --norcオプションを使用すると、これを禁止できます。 --rcfileファイルオプションは、Bashに〜/ .bashrcではなくfileからコマンドを強制的に読み取らせて実行させます。

110
Svet

ログイン時に、ほとんどのシェルはログインスクリプトを実行します。これを使用してカスタムスクリプトを実行できます。シェルが実行するログインスクリプトは、もちろんシェルによって異なります。

  • bash:.bash_profile、.bash_login、.profile(後方互換性のため)
  • sh:.profile
  • tcshおよびcsh:.login
  • zsh:.zshrc

あなたはおそらくあなたが使っているシェルを見つけることができます

echo $Shell

プロンプトから。

「ログイン」の定義を少し広くするには、Xの起動時にほとんどのディストリビューションで、Xセッションの開始時に.xsessionrcが実行されることを知っておくと便利です。

27
pjz

Bashを使用する場合、~/.bash_profile~/.bash_login、および~/.profileの最初のものが対話型ログインシェルに対して実行されます。 ~/.profileは通常、Bash以外のUnixシェルによって実行されると思います。 Bashは、非ログインの対話型シェルに対して~/.bashrcを実行します。

私は通常、常に設定したいものをすべて.bashrcに入れてから.bash_profileから実行します。また、ssh-agentのセットアップやscreenの実行など、ログインしているときにのみ実行するいくつかの設定も行います。

9
Michael Johnson

one scriptおよびonly 1つのスクリプトを実行する場合は、ユーザーにデフォルトのシェルを設定できます。

echo "/usr/bin/uptime" >> /etc/shells
vim /etc/passwd  
  * username:x:uid:grp:message:homedir:/usr/bin/uptime

面白い効果があります:)(安全ではありませんので、あまり信用しないでください。デフォルトのシェルをドライブを消去するスクリプトに設定するようなものはありません。..しかし、..驚くほど役に立つかもしれません)

5
Kent Fredric

この問題に何日もイライラしていました。 Ubuntuでは何も機能しませんでした。/etc/profileに呼び出しを入れると、ログイン試行時にすべてクラッシュしました。 「スタートアップアプリケーション」を使用することはできませんでした。これは、その現在のユーザーのスクリプトのみを設定します。

最後に、この小さな記事を見つけました: http://standards.freedesktop.org/autostart-spec/autostart-spec-0.5.html

解決策は次のとおりです。

  1. $ XDG_CONFIG_DIRSパスを見つけます。

    echo $ XDG_CONFIG_DIRS

  2. そのディレクトリにスクリプトを置きます

3
user568021

bash profile に配置します:

~/.bash_profile
3
gbjbaanb

OSXを使用している場合は、~/.profile

3
Craig B.

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>
3
Milhous

ローカルシステムのbashのマニュアルページで^ INVOCATIONを検索し、起動時にどのファイルを読み込むかについての情報を取得します。

man bash
/^INVOCATION

FILESセクションでも、

   ~/.bash_profile
          The personal initialization file, executed for login shells
   ~/.bashrc
          The individual per-interactive-Shell startup file

適切なファイルにスクリプトを追加します。スクリプトが$ PATHにあることを確認するか、スクリプトファイルへの絶対パスを使用します。

2
jtimberman

スクリプトを実行する/etc/profileにエントリを追加します。これは、すべてのログオン中に実行されます。自分のアカウントに対してのみこれを行う場合は、ログインスクリプトのいずれか(たとえば.bash_profile)を使用して実行してください。

スクリプト ~/.bash_profileはログイン時に実行されます。

1
William Keller