これは前の記事の連続です。私の質問SSH経由でコマンドを実行すると、ドットファイルはインポートされません。(元の投稿には600文字しか許可されていないため、十分な情報を追加できません。間違っている場合は申し訳ありません。)
要するに:私が持っているなら強く打つHost1とHost2のデフォルトシェル
Host1で次のコマンドを実行した場合:
ssh host2 ~/some/path/somescript.py 動作しません。
このためですまったく.-ファイルがリモートホストで発生するため、私のPYTHONPATHは設定されておらず、=コマンドは失敗します。
これは問題の短いバージョンにつながります。
いいえ。リモートホストでbashを実行するとき(つまり、非対話的に)取得するファイル。
これを実証するために、リモートホストに次のファイルを作成しました。
- .bash_login
- .bash_config ファイル
- .bashrc
- 。輪郭
echo コマンドを最初の行に追加します。つまり:
- .bash_loginで: echo ".bash_loginでこんにちは"
- .bash_profileで: echo "こんにちは、.bash_profileで"
- .bashrcによる: echo ".bashrcでこんにちは"
- .profileで: echo ".profileでこんにちは"
しかし、私が走って話すなら
ssh name@host2 "ls ~/foo" "ls" 出力のみが表示され、エコー出力は表示されません。
なぜエコーされますか?その人は実際にこう言いました。
bashが非対話型で始まるとき、たとえばシェルスクリプトを実行するために環境で変数BASH_ENVを見つけてそこに表示されたら、その値を拡張し、拡張値をファイルとして読み込み、実行します。 。実装する。 Bashは、次のコマンドが実行されたかのように動作します。if [-n "$BASH_ENV"]; "$BASH_ENV"; fi ですが、PATH 変数の値は f の検索には使用されません。
つまり、見えるマニュアルによるとBashが非対話式で始まる場合、デフォルトで実行される.-fileはありません。
環境で設定する必要があります。ファイルを取得したい場合はvar-le "BASH_ENV"です。
しかし、これは不可能なことのようです。ソースファイルがないので、BASH_ENVなどを設定できますか? ! ? ! ? ! ?
これはクレイジーだと思います。 SSHを介してリモートシステムで非対話式でbashを実行する必要がある地球上の唯一の人ですか?
助けてください。よろしくお願いします。
答え1
オプションで、これらのファイルのいずれかをインポートし、次のようにして同じssh呼び出しで.pyスクリプトを実行できます。ssh user@host ". ./.dot-command && python_script.py