我想从 Haskell 运行一个具有 unicode 文件路径的 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 接受的格式之一?
使用具有 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 转义字符串?