В функции callProcess
используется для проверки языкового стандарта (после этого lualatex запускается и хочет прочитать языковой стандарт).
f1 a b = do
-- check for locale
loc <- callIO $ callProcess "locale" []
putStrLn "writePDF2text locale " ]
Если программа запускается с ghci
(точно stack exec ghci
) Я получаю ожидаемый результат:
LANG=en_US.UTF-8
LANGUAGE=en_US:en
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=
Если он запускается под stack test
, я получаю
locale: Cannot set LC_CTYPE to default locale: No such file or directory
SSG > locale: Cannot set LC_MESSAGES to default locale: No such file or directory
SSG > locale: Cannot set LC_ALL to default locale: No such file or directory
SSG > LANG=en-US
SSG > LANGUAGE=en_US:en
SSG > LC_CTYPE="en-US"
SSG > LC_NUMERIC="en-US"
SSG > LC_TIME="en-US"
SSG > LC_COLLATE="en-US"
SSG > LC_MONETARY="en-US"
SSG > LC_MESSAGES="en-US"
SSG > LC_PAPER="en-US"
SSG > LC_NAME="en-US"
SSG > LC_ADDRESS="en-US"
SSG > LC_TELEPHONE="en-US"
SSG > LC_MEASUREMENT="en-US"
SSG > LC_IDENTIFICATION="en-US"
SSG > LC_ALL=en-US
Тот же результат получается с той же программой, установленной и запускаемой без Stack
.
Есть ли объяснение этой разнице в поведении? Что еще более важно, как избежать проблемы и убедиться, что следующий вызываемый процесс видит правильную среду?