ターゲットコンピュータ(OS X El Capitan)に抽出するパスを取得しようとすると、結果はありませんbrew
。/usr/local/bin
# ssh [email protected] -p 2222 which brew
#
トラブルシューティング:
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)
/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
which
それ自体は問題がないようです。# ssh [email protected] -p 2222 which bash /bin/bash
また、マシンにインタラクティブにログインしたときに予想される結果が得られました。
# 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
最後に、
which brew
コマンド置換表現で動作します。# ssh [email protected] -p 2222 echo $(which brew) /usr/local/bin/brew
echo
以前に呼び出すと、which brew
正しい結果が得られます。# ssh [email protected] -p 2222 echo test ; which brew test /usr/local/bin/brew
実行するシェルを明示的に呼び出しても、
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 brew
SSHコマンドパラメータで直接実行すると失敗するのはなぜですか?
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 brew
SSHコマンドが終了したら、ローカルシェルで実行します。これがうまくいかない理由は次のとおりです。
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