読者です 読者をやめる 読者になる 読者になる

NeverBlog::Likk::Unexistable;

見なかったことにして下さい

Perl から任意のログインシェルでsystemや``を実行する方法

perl から シェルを実行したいときは system か `` (qx//) で代替済むのですが、それらから呼び出すのが素のsh でどうしても実行環境のzshrc を読み込んだ上でzsh を実行したいことが出てきた。

でも `zsh hoge`; とか system("zsh && hoge"); やってもダメなんですよね。
んで、良い方法も特に思い浮かばなくてローカルに鍵通して `ssh localhost -t "hoge"` にした。

ログインシェルがzsh なので zsh で実行されるし、source .zshrc や source .zprofile すればパスとかも通る。


やったこと、まとめ

`qq{ssh localhost -t "source .zprofile; source .zshrc; cd ~/path/to/;hoge --option"}`

え?最初から zsh で叩けばいいじゃんって?
その反応は多分正しいのですが、黒い画面触りたくない人向けとか、やんごとなき事情で、perlのWAFから zsh 実行したい時があるんですよ。

何か良い方法あったら教えてください。

追記

zsh -c で行けるのでは?と言われたので直した、

`qq{zsc -c "source .zprofile; source .zshrc; cd ~/path/to/;hoge --option"}`

あと

!#/bin/zsh
cd ~/;
source .zprofile;
source .zshrc;
cd ~/path/to/;
hoge --option;

を実行するzshスクリプトhoge.zsh というファイルに保存して、perlからは `zsh -c hoge,zsh` だけするようにすると考えること少なくて良さそうというコメントも頂きました。
有難うございます。