Bash 当我的shell脚本从cron运行时,为什么非ASCII字符会损坏?

Bash 当我的shell脚本从cron运行时,为什么非ASCII字符会损坏?,bash,character-encoding,cron,Bash,Character Encoding,Cron,我有一个简单的本地快速访问。当我从命令行运行它时,带有非ASCII字符(如ä,ö,å)的事件工作正常,生成的输出文件看起来很完美 但是,当脚本从cron运行时,输出文件中的字符被损坏。例如,Ä被替换为文字字符序列\xc4(即,“Ärstidernas”变为“\xc4rstidernas”)。该脚本正在OSX 10.6上运行。我不知道链中的哪个工具(cron、bash、python-2.6)导致了这种情况。可能有什么问题?在crontab的开头添加LC\u CTYPE=sv\u SE,也许吧?多亏

我有一个简单的本地快速访问。当我从命令行运行它时,带有非ASCII字符(如ä,ö,å)的事件工作正常,生成的输出文件看起来很完美


但是,当脚本从cron运行时,输出文件中的字符被损坏。例如,Ä被替换为文字字符序列
\xc4
(即,“Ärstidernas”变为“\xc4rstidernas”)。该脚本正在OSX 10.6上运行。我不知道链中的哪个工具(cron、bash、python-2.6)导致了这种情况。可能有什么问题?

在crontab的开头添加
LC\u CTYPE=sv\u SE
,也许吧?

多亏了@aztaroth,我对
LC\u CTYPE
做了一些研究,发现正确的解决方案是在脚本中添加以下内容:

export LC_CTYPE="UTF-8"

LC\u CTYPE
需要字符编码类型,而不是语言字符集。因此,将其设置为UTF-8修复了问题。

如果看不到crontab条目,可能很难诊断问题。顺便问一下,为什么要使用
eval
?这应该是不必要的。替换看起来像Python会做的事情。你可能有奥斯蒂德纳斯,而不是奥斯蒂德纳斯,顺便说一句(
如果[“$?”-eq“0”]
是对测试的无用使用。请看@tripleee是的,是我的室友做了这件事,并且在名字上有一个拼写错误。:)另外,我更喜欢使用测试,因为它可以提高可读性。哦,我的意思是你应该使用
如果$googleCli日历列表--cal“$calendar”-date“$today,$stopDay”>“/tmp/$calendar”;然后在脚本中添加mv…
。我不知道将退出代码放在单独的子句中如何使其更具可读性;恰恰相反。