sshログイン時の.bashrc


374

Hardy 8.04を実行しているubuntu-boxにsshすると、私の環境変数.bashrcが設定されません。

sourceを実行する.bashrcと、変数は適切に設定され、すべてが順調です。

どのように来る.bashrcのログイン時に実行されていませんか?


92
この「オフトピック」は一体どういうことでしょうか。
ジョナ

8
私はこのように厳密ではありませんが、これはserverfault.com、superuser.com、またはaskubuntu.comに属していると思います
Michael Butler

16
@MichaelButler同意する。なぜ閉じるのではなく、動かさないのか...
Luc

4
@Luc-質問は、作成後60日以内にのみ移動できます。この質問は、それが作成されてから3年半経過するまで話題から外れていませんでした。60日間のルールは、質問データベースがバックアップされたときなどに関係があると思います...そのバックアップが発生した後は移行がより困難になります。
ArtOfWarfare 2015

かなり役立つ質問だと思いました。マシンBにsshするためにマシンAにsshする必要があるときにこの問題が発生しました(Aのローカルネットワーク経由でのみアクセス可能)。私の間の実用的な違いを教えて.bashrc.bash_profile
information_interchange

回答:


620

.bashrcSSHを使用してログインする場合、ソースは提供されません。あなたは.bash_profileこのようにそれを調達する必要があります:

if [ -f ~/.bashrc ]; then
  . ~/.bashrc
fi

32
これはBashを使用した正気なディストリビューションで機能するはずなので、これらのコメントはすべて廃止されました:)

1
Ubuntu 12.04 LTSサーバーで.bashrcは、これは不要です。デフォルトでは、SSHを実行するときにソースが提供されるためです。
orokusaki

4
@orokusaki:修正、それは:) .profileをスキップすることを強制していた不正な.bash_profileファイルがありました。
Lester Peabody

4
@LesterPeabodyと同様に、私の.bashrcは、不正な.bash_profileが原因で、Ubuntu 12.04 LTSサーバーをソースとしていませんでした。RVMのインストールによって作成されました。RVMコマンドを.profileに移動し、.bash_profileを削除しました。すべて正常に動作しています。
Rod Daunoravicius 2013年

4
fwiw Debian Jessie / 8はすでに標準でソースを提供.bashrcしていますが、そうでは.profileありません.bash_profile
underscore_d

75

ホブハウスと同じような状況でした。コマンドを使いたかった

 ssh myhost.com 'some_command'

'some_command'は '/ var / some_location'に存在するので、 '$ HOME / .bashrc'を編集してPATH環境に '/ var / some_location'を追加しようとしました

しかし、それはうまくいきませんでした。デフォルトの.bashrc(Ubuntu 10.4 LTS)は、以下のようなコードによるソースを防ぐためです

# If not running interactively, don't do anything
[ -z "$PS1" ] && return

ssh非ログインシェルの環境を変更する場合。その行の上にコードを追加する必要があります。


7
相棒、ありがとな!これは私にとってうまくいかなかったビットでした:)
Raymond Barlow '18

クールなチップだ。jenkinsからスクリプトを実行すると、このトラップに遭遇しました。私はssh経由でログインしましたが、うまくいきました。Jenkinsは非対話的にログを記録し、失敗しました。
KrzysztofJabłoński14年

1
一般的な解決策が非対話型シェルの新しいパスを設定しないことである理由は私を超えています。このため、ifステートメントよりもかなり上にあるはずです。エイリアスとインタラクティブツールの初期化だけがその行より下にあるようです...
BenPen

2
:Ubuntuの他のバージョンのようなインタラクティブなチェックルックスでbash # If not running interactively, don't do anything case $- in *i*) ;; *) return;; esac
シルヴァン

おかげで、これで解決しました。約1時間前にこれを見たことがありますか。
ジャスティンローレンス

31

bashの呼び出しがどのように機能するか、どのdotfileが何をするか、そしてどのようにそれらを使用/構成するべきかについての優れたリソースについては、次をお読みください:


重要な部分:「/ etc / profileを読み取ってから、.bash_profileまたは.bash_loginまたは.profileのいずれかを読み取る」
アンディヘイデン

29

aymanの解決策が機能しない場合は、.profileではなく、ファイルに名前を付けてみてください.bash_profile。それでうまくいきました。


2
驚くばかり。私はこの詳細で15分を失いました。
vmassuchetto 2012年

これは、Ubuntu 12.10
ThinkCode

1
GUIログイン時に.profileがロードされると思います。.bash_profileその端末ログイン用。
Razec Luar 2013

これは、Debian Jessie DockerコンテナーへのSSHログインにも機能しました(永続的なストレージにデータのみのコンテナーを使用)。 -------> / bin / dash
Stuart Cardall

1
@RazecLuar .profileは、そのシェルがGUIを生成するつもりであるかどうかに関係なく、すべてのログインシェルによって実行されます。あなたのコメントは質問とこの回答に完全に矛盾しています。これは、それ.profileがSSHで呼び出されたことを明確に示しています-明らかに非GUIメソッドです。
underscore_d
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.