SSHを使用して実行すると、一部のコマンドがユーザーエクスペリエンスをロードしないのはなぜですか? (他の人がやっている間)

SSHを使用して実行すると、一部のコマンドがユーザーエクスペリエンスをロードしないのはなぜですか? (他の人がやっている間)

ターゲットコンピュータ(OS X El Capitan)に抽出するパスを取得しようとすると、結果はありませんbrew/usr/local/bin

# ssh [email protected] -p 2222 which brew
#

トラブルシューティング:

  1. brew/usr/local/bin/次の方法で正しく実行してくださいssh

    # ssh [email protected] -p 2222 ls -l /usr/local/bin/brew
    -rwxr-xr-x  1 vagrant  admin  656 Mar 20 10:05 /usr/local/bin/brew
    # ssh [email protected] -p 2222 /usr/local/bin/brew --version
    Homebrew 0.9.5 (git revision 3a41; last commit 2016-03-20)
    
  2. /usr/local/binパスには以下が含まれます。

    # ssh [email protected] -p 2222 echo $PATH
    /usr/local/sbin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/opt/X11/bin:/opt/local/bin:/opt/local/sbin
    
  3. whichそれ自体は問題がないようです。

    # ssh [email protected] -p 2222 which bash
    /bin/bash
    
  4. また、マシンにインタラクティブにログインしたときに予想される結果が得られました。

    # ssh [email protected] -p 2222
    Last login: Sun Mar 20 12:02:55 2016 from 10.0.2.2
    osx-pf:~ vagrant$ which brew
    /usr/local/bin/brew
    
  5. 最後に、which brewコマンド置換表現で動作します。

    # ssh [email protected] -p 2222 echo $(which brew)
    /usr/local/bin/brew
    
  6. echo以前に呼び出すと、which brew正しい結果が得られます。

    # ssh [email protected] -p 2222 echo test ; which brew
    test
    /usr/local/bin/brew
    
  7. 実行するシェルを明示的に呼び出しても、which brewこの状況は変わりません。

    # ssh [email protected] -p 2222 /bin/sh -c "which\ brew"
    # ssh [email protected] -p 2222 /bin/sh -c "which\ which"
    /usr/bin/which
    

    しかし、/bin/sh(6)の「トリック」を明示的に呼び出すことはもう機能しません。

    # ssh [email protected] -p 2222 /bin/sh -c "echo\ test\ \;\ which\ brew"
    test
    #
    

which brewSSHコマンドパラメータで直接実行すると失敗するのはなぜですか?

echoどの外部コマンドが/bin/echo正しく表示されますが、PATH表示されないのですかwhich? 2つのコマンドを順番に実行すると、2番目のコマンドが最初のコマンドの環境を使用するのはなぜですか?

(6)の文書化されていない解決策を参照せずに環境がロードされていることを確認することは可能ですか?

ベストアンサー1

ssh [email protected] -p 2222 echo $PATH

ローカルシステムはPATHここから印刷されます。ローカルシェルで変数が拡張されるのを防ぐには、変数を引用する必要があります。

ssh [email protected] -p 2222 'echo $PATH'

以下も同様に適用されます。

ssh [email protected] -p 2222 echo $(which brew)

については:

ssh [email protected] -p 2222 echo test ; which brew

which brewSSHコマンドが終了したら、ローカルシェルで実行します。これがうまくいかない理由は次のとおりです。

ssh [email protected] -p 2222 /bin/sh -c "echo\ test\ \;\ which\ brew"

注:すべてのエスケープ操作を実行する必要はありません。


ここでの問題は、次のようなin(または同様のファイル)brewに追加することです。PATH.profile.bash_profileログインシェル始まった。 SSH は、コマンドの実行を指示するのではなく、対話的に実行された場合にのみログインシェルを起動します。 ~からman ssh:

 If command is specified, it is executed on the remote host instead of a login shell

あなたは試すことができます:

ssh [email protected] -p 2222 bash -lc brew

おすすめ記事