1

重複の可能性:
SSHリモートコマンドが手動で実行した場合よりも少ない環境変数を取得するのはなぜですか?

Mac OSX10.8.2で実行

SSH経由でperlスクリプトを実行しています。perlスクリプトでは、$ ENV {MY_VAR_NAME}を使用して環境変数を照会し、ローカルで実行すると正常に動作します。ただし、SSHを使用すると、すべての環境変数が設定解除されます。

私も走ってみました

system("source ~/.bash_profile");

私のスクリプトの冒頭では役に立たなかった。

任意のヒント?

編集:

私の質問を言い換えます。

私はマシンAとBを持っています。マシンBでperlを実行し、Bの環境変数を取得しようとしましたが、機能しました。次に、同じスクリプトを実行して、つまりこのコードを使用して、AからBにSSHで接続します。

ssh user@B perl myscript.pl

今回は、Bの環境変数はすべて空白です。

任意のヒント?

アップデート:

上記のスクリプトを実行すると、マシンBで〜/ .bashrcが呼び出されましたが、〜/ .bashrcで環境変数を設定した後、上記のコマンドを再度実行しても、環境変数が表示されません。

また、私のperlスクリプトにのみが含まれている場合

echo $ENV{PATH}

それから私は得る

/usr/bin:/bin:/usr/sbin:/sbin
4

2 に答える 2

1

ssh を使用してコマンドを実行するときに設定される環境変数は、以下によって異なります。

  • ログインシェル
  • そのシェルの起動ファイルの内容

たとえば、起動時にbash次のファイルのいずれかを読み取る場合があります。

  • ~/.bash_profile
  • ~/.profile
  • ~/.bashrc
  • ~/.bash_login
  • /etc/profile

シェルが「ログイン」シェルと見なされるかどうか、セッションが「対話型」セッションであるかどうかなどの要因に応じて。

を使用するときは、どの起動ファイルが実行されているかを確認する必要がありますssh

これを行うには、さまざまなファイルを入れecho here in XXXXて ssh コマンドを実行するだけです。ssh(コマンドを使用しない場合は、コマンドを使用した場合とは異なる起動ファイルが呼び出される可能性があることに注意してくださいssh。)

の場合、起動時にどのファイルが読み込まれるかについては、そのページbashのセクションを参照してください。INVOCATIONmanbash

于 2012-10-10T02:41:44.010 に答える
0

トリックは.bash_profile、同じリモート シェル セッションで perl スクリプトを実行することです。

ssh user@B 'source ~/.bash_profile && perl myscript.pl'
于 2012-10-10T08:50:49.650 に答える