〜/ .bash_loginを使用してログイン時にスクリプトを実行します


14

Ubuntuでログインおよびログアウトするときにスクリプトを実行する必要があります。

スクリプトを自分で入れようとしました~/.bash_loginが、うまくいきませんでした。

スクリプトを実行できるより良い場所はありますか?

私のスクリプトはにあり、/home/gsd/script/login.sh実行可能です。

編集:

入力するとスクリプトが実行/home/gsd/script/login.shされます:+ xで設定されます

今、私は持っている:touch /home/gsd/test.txt~/.bash_loginにテスト。

ファイルtest.txtは作成されません

編集2:

gsd@laptop:~$ ll ~/.bash*
-rw------- 1 gsd gsd 38639 2012-01-25 17:25 .bash_history
-rw-r--r-- 1 gsd gsd    29 2012-01-25 15:22 .bash_login
-rw-r--r-- 1 gsd gsd   220 2011-11-03 19:22 .bash_logout
-rw-r--r-- 1 gsd gsd  3136 2011-11-04 08:00 .bashrc

.bash_loginには適切な権限がありますか?ls -l .bash_loginは何を返しますか?
サンティアゴスキー

あなたも持ってい~/.bash_profileますか?
-enzotib

-rw-r--r-- 1 gsd gsd 313 2012-01-22 11:56 .bash_login
ジーノサリバン

1
chmod +x .bash_login
ゾーク

1
chmod +x .bash_login(.bash_loginに実行可能ビットを設定する)必要はありません。Bashのマニュアルはこの領域では少しわかりにくいですが、Bashはシェルスクリプトのように.bash_loginを実行しません。ファイルを読み取ってから、その中のコマンドを実行します(実行することで同様のことができますsource ~/.bash_login)。
ステファンLasiewski

回答:


20

.bash_profileが存在する場合、Bashは.bash_login(または.profile)を読み取りません。この厄介な機能は、Bashマニュアルの一部のバージョンでは説明されていますが、すべてではありません。

.bash_profile.bash_login類似しているので、コマンドをに配置することをお勧めします。.bash_profileこれは一般的に使用され、.bash_login比較的知られていないためです。また、の.bashrc代わりにコマンドを入力することも検討してください.bash_profile。このマニュアルでは、「対話型の非ログインシェル」と「対話型のログインシェル」の違いについて説明しているため、必ずそのセクションをお読みください。

GNU Bashリファレンスマニュアルバージョン4.1:Bash Startup Filesには次のように書かれています:

〜/ .bash_profile、〜/ .bash_login、および〜/ .profileをこの順序で探し、存在し 、読み取り可能な最初のコマンドからコマンドを読み取り、実行します。

また、スーパーユーザーに関するこの質問と、このBashのハウツー(freeunix.dyndns.org:8088のアドレスによって阻止されることはありません。これはまだ良質のマニュアルであり、私は長年使用しています)。

.bash_profileがないと言っているので、更新してください。

「インタラクティブな非ログインシェル」と呼ばれるものを使用していないようです(詳細については、Bashのマニュアルを参照してください)。

これをテストするには、以下の各ファイルのようなものを追加します.bashrc.bash_profile.bash_login

echo "DEBUG: I am .bashrc"

echo "DEBUG: I am .bash_profile"

その後、ログアウトして再度ログインします。ログインすると、「DEBUG:I am .bashrc」というフレーズのみが表示され、「I am .bash_profile」は表示されないはずです。もしそうなら、それはあなたが「インタラクティブな非ログインシェル」であることを意味し、それは単にBashが呼び出す.bashrcが、ではないことを意味し.bash_profileます。これらのドットファイルが現状である理由については、以下の@Andrejs Cainikovsの投稿およびhttp://mywiki.wooledge.org/DotFilesを参照してください。


私はbash_profile持っていない、私の質問を更新しました
ジーノサリバン

さて、先ほど「はい、bashプロファイルを持っています」と言ったからです。
ステファンLasiewski

はい、私はそれは、それを削除していたが、同じ結果
ジーノ・サリバン

3
この答えは問題を解決します、私はそれを受け入れる価値があると思います。
マリウスブトゥック

1
また、これらのbashファイルは、GUIにログインするときではなく、シェルにログインするときにのみ実行されることに注意してください(ターミナル、sshなどを使用)。
mivk

5

対話型対話型かにかかわらず、ログインシェルは、.profile

対話型シェルは読み取りと実行を行い.bashrcます。

多くの場合、その/etc/profileソースが表示されます。.bashrcしたがって、行われたすべての設定は、.bashrc対話型か非対話型かに関係なく、ログインシェルでも有効になります。

シェルの初期化スクリプトの実行順序は、シェルが対話型か非対話型かによって異なり、ログインスクリプトであるかどうかとは関係ありません。

bashが対話型ログインシェルとして呼び出されると、bash からコマンドを読み取り、実行します/etc/profile。次に、Bashは、最初のファイルが存在し、次のファイルのみが読み取り可能になるように実行しようとします。

  1. .bash_profile
  2. .bash_login
  3. .profile

これらのファイルのいずれかが見つかったが、読み取ることができない場合、エラーが発生します。見つからない場合、エラーはありません

このプロセスは、--loginオプションを使用して非対話型ログインシェルが呼び出されたときに実行されます。


1
知る限り、.profileファイルはユーザーがグラフィカルインターフェイスを使用してログインした場合にのみ読み取られ、実行されます。それ以外の場合は読み取られません。
RajaRaviVarma

@RajaRaviVarma私はちょうどテストし(Ubuntu 16.04)、~/.profile間違いなく非グラフィカルなログインシェルで読みました(私は別のターミナルに切り替えてCtrl+Alt+F2ログインしました)。
-waldyrious

私は@RajaRaviVarmaに同意します-SSH経由でUbuntu 16.04 VMにログインして.profileいますが、読み取られません.bashrc
-jamesc

0

実行するスクリプトが実行可能であることを確認してください。それを実行chmod +x scriptnameするために実行します。また、スクリプトが正しいシェバンで始まることを確認してください(#!/bin/bashシェルスクリプトの場合)。最後に、それを実行するときに、すべての完全なパスを使用して、例えば、/usr/bin/echo代わりにechoちょうどあなたのスクリプトは、あなたがするために使用されているものと同一ではないに実行されることを環境を包みなさい。


0

Bash は、対話型ログインシェルとして実行された場合にのみ、.bash_loginまたは.profileファイルを探します。対話型の非ログインシェルとして実行された場合、読み取ります.bashrc
通常、2番目のケースです。つまり、gnome-terminalbashを実行すると、非ログインシェルとして実行されます。

これは、Gnomeを起動している場合は.bash_login実行されないことを明確に示しています。ただし、ランレベルを下げてbashを直接起動すると、ログインに成功すると同じファイルが実行されます。リモートSSH接続の場合にも実行される
と思い.bash_loginます。

ここから部分的に破れまし

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.