ssh command で展開されるシェルが .zshrc を読んでいない

投稿者: Anonymous

初めて質問いたします。

表題のとおりなのですが、

ssh <remote host> command

のようにコマンドを実行したところ、
command のパスが通っておりませんでした。
なお、command コマンドは .zshrc でパスを通しています。

そこで、以下の実験を行いました。
まず、リモートサーバの .zshenv には以下の内容を追記し、

CHECK_ZSHENV='loaded!'

同じくリモートサーバの .zshrc には以下の内容を追記しました。

CHECK_ZSHRC='loaded!'

そして以下を実行しました。

ssh <remote host> 'echo $CHECK_ZSHENV'
loaded!
ssh <remote host> 'echo $CHECK_ZSHRC'

結果は以上の通りで、やはり .zshrc は読まれておりませんでした。
ふつうに ssh でログインをした場合には .zshrc は読まれております。

ssh <remote host> command

形式でコマンドを実行した場合インタラクティブシェル扱いになり、
.zshrc が読まれるものと考えたのですが、間違っていますでしょうか。
間違っていない場合、問題としては何が考えられますか。
これを解決する方法があれば、合わせてご教示いただけますと幸いです。

なお、サーバ、クライアントともに Arch Linux を利用しております。
追加で必要な情報があれば、お知らせください。
よろしくお願いいたします。

解決

ssh <remote host> command

形式でコマンドを実行した場合インタラクティブシェル扱いになり、.zshrc が読まれるものと考えたのですが、間違っていますでしょうか。

インタラクティブシェルというのはプロンプトを表示してユーザのコマンド入力を受け付ける状態のシェルの事を言います。
コマンドを指定した場合はインタラクティブシェルでは無いので、.zshrc が読み込まれないのは正しい動作です。

ssh <remote host> command で自分で設定したPATHを利用したい場合、.zshenvで設定する必要があります。

回答者: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *