sshを介してコマンドを実行すると、ドットファイルが取得されない


11

プログラムを対話形式で実行すると、問題なく動作します。

ssh somehost
$ ~/some/path/somescript.py

sshでプログラムを直接実行すると、機能しません。ソースされていないPYTHONPATHため、変数は設定されて.bashrcいません。

ssh somehost ~/some/path/somescript.py

を実行するとssh somehost 'source ~/.bashrc; ~/some/path/somescript.py'、正常に動作します。

しかし、後者はtcshを使用していて、まったく持っていないなど、他の一部の人には機能しません~/.bashrc

何がすべてのシェルのために働く別のホスト上でssh経由の事を実行するコマンドは?


1
ここで答えられた、stackoverflow.com / questions / 820517 / bashrc-at- ssh -login、基本的に、sshは.bashrcをソースしません。.bash_profileまたは他のオプションを介して.bashrcをソースする必要があります。
EightBitTony

1
@EightBitTony:いいえ、それは別の問題です。bzdjambooの質問は、非対話型セッションに関するものです。
ジル 'SO-悪であるのをやめる'

実際に、私が投稿したリンクの最後の答えは価値があるように見えます。sshは.bashrcをソースにしますが、インタラクティブであるかどうかのチェックのために実行されません。しかし、あなたの答えはすべての基盤を網羅していることに感謝しています。
EightBitTony

3
@EightBitTony:その質問では、受け入れられた答えは質問者にとっては良い解決策ですが、答えはすべてを語っていません。SSH自体は何もソースしません。ログインシェルはbashはとして呼び出された場合bash、その後、その発生源.bash_profile.profile対話的なログインのために、そして.bashrc非対話型ログインのため。ログインシェルがbashとして起動されたsh場合、またはashまたはkshの場合.profile、対話型ログインのソースとなり、非対話型ログインのソースはありません。
ジル 'SO-悪であるのをやめる'

回答:


12

非対話型ログインに対して実行される標準のユーザーごとのファイルはありません。プログラムを自己完結型にして、デフォルト以外の環境変数に依存せずに依存関係を見つけられるようにするか、通常は次のように明示的に環境を設定する必要があります。

ssh somehost '. ~/.profile; exec ~/some/path/somescript.py'

環境変数を設定しないでください.bashrc。このファイルは対話型シェル用であり、bashの各インスタンスで読み込まれます。環境変数はに設定する必要があり.profileます。これはログイン時に読み込まれます。ログインシェルとしてBourneスタイルのシェルを使用しない非常に少数の人々は別として、.profilebashまたはzshを使用するかcshまたは魚をインタラクティブに。.bashrcと.bash_profileの違いも参照してください 。bash環境変数を設定するにはどのセットアップファイルを使用する必要がありますか?

そうは言っても、特定のキーでsshでログインするたびにスクリプトを入手する方法があります。参照ホストにSSHingときシェル設定情報をプッシュする方法はありますか?shスタートアップファイルをsshで上書きします


では、どのように「回答済み」とマークしますか?:-)
bzdjamboo

この回答セクションの左側に、上下の投票矢印と投票カウンターがあります。そのすぐ下にチェックボックスのアウトラインがあるはずです。それをクリックして、回答受け入れ機能をアクティブにすることができます。
カレブ

どうもありがとうございましたが、どうやらあなたの答えは私の問題を解決しなかったようです。
bzdjamboo

ここに問題の少し新しい定式化とその根本の私の現在の理解があります。
bzdjamboo

ここに60個以上の文字を追加することはできないようですので、もう一度個別に質問する必要があります。すみません それ。繰り返しになりますが、これは解決されておらず、数日間ずっと掘り下げても助けにはなりませんでした。
bzdjamboo

0

私は同じ問題を抱えていましたが、私にとって解決策は異なっていました。私のユーザーはシェルとしてbashを使用するように構成されていませんでした。代わりにシェルとしてzshを使用したため、ログイン時にbashドットファイルが実行されませんでした。テキストエディタで/ etc / passwdを開き、ユーザー名と使用するシェルを探します。

root:x:0:0:root:/root:/bin/zsh

これが、ユーザーエントリの外観です。/ bin / bashではなく/ bin / zshと表示されていることに注意してください。zshの場合、正しいドットファイルは〜/ .zprofileです。その内容は、sshを使用してログインするたびに実行されます。

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