SSH経由でコマンドを実行すると、ドットファイルはインポートされません。

SSH経由でコマンドを実行すると、ドットファイルはインポートされません。

プログラムを対話的に実行すると正常に動作します。

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

SSH経由で直接プログラムを実行しても機能しません。ソースがないため、変数PYTHONPATHが設定されていません。.bashrc

ssh somehost ~/some/path/somescript.py

実行するとssh somehost 'source ~/.bashrc; ~/some/path/somescript.py'素晴らしい動作します。

~/.bashrcただし、後者はtcshを使用し、tcshをまったく使用しないなど、他の場合には機能しません。

何ですかこれすべてのシェルで動作する他のホストでSSHを介して何かを実行するコマンドはありますか?

答え1

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

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

次の場所に環境変数を設定しないでください.bashrc。このファイルは対話型シェル用であり、すべてのbashインスタンスから読み取られます。環境変数は設定されている必要があり、.profileログイン時に読み込まれます。.profilebashやzshを使用するか、インタラクティブにcshやFishを使用しているかにかかわらず、Bourneスタイルのシェルをログインシェルとして使用しない限り、少数を除くすべての人に機能します。また、見ることができます .bashrcと.bash_profileの違いBashを使用して環境変数を設定するには、どの設定ファイルを使用する必要がありますか?

つまり、特定のキーを使用してSSHを介してログインするたびにスクリプトを取得する方法があります。バラよりホストにSSHで接続するときにシェル設定情報をプッシュする方法はありますか?SSHによるsh起動ファイル

答え2

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

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

これが私のユーザーアイテムの外観です。 /bin/bashではなく/bin/zshとマークされています。 zsh の場合、正しいポイントファイルは ~/.zprofile です。これはSSHを使用してログインするたびに実行されます。

関連情報