haskell-jp / questions #98 at 2021-09-17 00:57:53 +0900

あるバイナリファイル(xmobarの実行可能ファイル)をxmonad(正確には xmonad-contrib ) の XMonad.Hooks.DynamicLog.statusBar を用いて実行した場合と、直接バイナリを叩いた場合(bashから、 /bin/sh -c "与えられた実行可能ファイル") の挙動が違う現象に遭遇して困っています。(xmonadからの場合はUTF8文字列が描画できず、直接ならできる)

statusBar は内部では System.Posix.Process.ExecuteFile を叩いており()、 /bin/sh -c "与えた実行可能ファイル" を(execvシステムコールを用いて)実行しています。
なので直叩きする際も念のためshから呼びだしていますが同じにならず...
システムコール周りの違いとか...?くらいしか思い付かず...
あまりHaskellな質問ではない気もしてしまいますが、似たような現象があったりした程度でも教えていただきたいです...!

(参考、画像最上部がxmonadを用いた時で画像最下部が直叩きの時の結果です)
https://twitter.com/Cj_bc_sd/status/1438519917846822923
環境変数が引き継げてないとか、じゃないっすかね。
なるほど〜…?
statusBarの方のことですよね、とりあえず環境変数周りいじってみます…!
「直接バイナリを叩いた場合」というのはターミナルからbashを呼んだ場合、ですよね?であればターミナルからシェルを起動した時点でシェルの設定(bashであれば .profile とか .bashrc とか)から環境変数を読んでいるのでそれが、xmonadからだと読めていない可能性があります。
あ〜〜なるほど!
ターミナル上でも /bin/sh -c で叩いてみてたので条件同じになってると思ってたんですが、そうか呼び出し元の環境変数が違うんですね…
色々試してみます!ありがとうございます!
色々弄ってみた所、 LANG=ja_JP.UTF-8 にしてあげたら動きました!!
環境変数盲点でした...ありがとうございます..!!