It's raining cats and dogs.

無駄なことなんてないはず

[ssh] ssh経由で他のサーバのスクリプトを実行するときに.bash_profileを読ませる方法

書きなぐりメモ。

ssh経由で何かのスクリプトを実行したい時は

$ ssh <hostname> "/usr/bin/perl /path/to/hoge.pl"

という感じで実行できるけど、~/.bash_profileとかに書かれた環境変数を使って処理をするスクリプトだと、sshの非対話モードでは~/.bash_profileを読んでくれないので、困ってしまう。

そんなときは

$ ssh <hostname> "source ~/.bash_profile; /usr/bin/perl /path/to/hoge.pl"

のように明示的に読ませれば良いらしい。

ちなみに

sshdの設定でPermitUserEnvironment=yesを設定して、~/.ssh/environmentというファイルに環境変数を設定するやり方もあるようだけど、必ずしもssh経由で実行するものではなく、対象のサーバで直接実行したい場合もあるので、~/.bash_profile~/.ssh/environmentの両方に設定するのが冗長なので今回は上記のやり方にした。