Unicode ファイル パスを持つ Haskell から bash コマンドを実行したいと思います。
Haskell の文字列は \escapes を使用します。
"beißen" -> "bei\223en"
Bash は次の形式を受け入れるようです:
$'bei\xC3\x9Fen.avi'
と'beißen.avi'
runCommand
fromSystem.Process
は型を持っているので
runCommand :: String -> IO System.Process.Internals.ProcessHandle
Haskell 文字列を Bash が受け入れる形式の 1 つにエンコードするにはどうすればよいですか?
bash 3.2 を持つ Mac OSX 10.8.4 を使用します。
編集
私の問題はbashエスケープに関係しているようです
私はText.ShellEscape
(http://hackage.haskell.org/packages/archive/shell-escape/0.1.2/doc/html/Text-ShellEscape.html)を使用して、bashでエスケープする必要がある文字をエスケープしています
例えば
import qualified Data.ByteString.Char8 as B
import qualified Text.ShellEscape as Esc
let cmd = B.unpack $ Esc.bytes $ Esc.bash . B.pack $ "beißen.txt"
それは私に与えます"$'bei\\xDFen.txt'"
実行中runCommand $ "ls " ++ cmd
それは私に与えます
ls: bei�en.txt: No such file or directory
bash の文字列をエスケープするより良い方法はありますか?