web-dev-qa-db-ja.com

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

プログラムをインタラクティブに実行すると、正常に動作します。

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を介してモノを実行するtheコマンドとは何ですか?

11
bzdjamboo

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

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

.bashrcで環境変数を設定しないでください。このファイルはインタラクティブシェル用で、bashの各インスタンスで読み取られます。環境変数は、ログイン時に読み取られる.profileで設定する必要があります。ログインシェルとしてBourneスタイルのシェルを使用していない非常に少数のユーザーは別として、.profileは機能します誰にとっても、bash、zsh、csh、または魚をインタラクティブに使用するかどうか。 。bashrcと.bash_profileの違いbashで環境変数を設定するためにどの設定ファイルを使用する必要がありますか? も参照してください。

とはいえ、特定のキーを使用してSSH経由でログインするたびにスクリプトを読み込む方法があります。 ホストにSSH接続するときにシェル構成情報をプッシュする方法はありますか?ssh経由のsh起動ファイル を参照してください。

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

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

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

0
Martin Hansen