プログラムを対話的に実行すると正常に動作します。
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
ログイン時に読み込まれます。.profile
bashや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を使用してログインするたびに実行されます。