【问题标题】:Execute sh file with Russian or Chines Chars - Saved as UTF-8 or Unicode [duplicate]使用俄语或中文聊天执行 sh 文件 - 保存为 UTF-8 或 Unicode [重复]
【发布时间】:2019-01-06 18:41:28
【问题描述】:

我有一个文件,里面有一些俄语字符。以下是我的 sh 文件的内容。

#!/bin/sh
sed -i "s/\bVAR1\b/Привет, как ты/g" file1.txt

当我保存这个文件时,我必须将它保存为 UTF-8 或 Unicode 格式,因为我在文件中有一些 Unicode 格式的字符,如果我保存为 ANSI,我会丢失这些字符。保存文件后,当我使用文件命令时,我会得到以下信息

bash-4.1$ file test.sh
test.sh: UTF-8 Unicode (with BOM) English text, with very long lines, with CRLF line terminators

问题:我怎样才能使它成为可执行的shell脚本文件?如果我的文件只有英文字符,我会得到以下信息

bash-4.1$ file test2.sh
test2.sh: POSIX shell script text executable

【问题讨论】:

标签: bash encoding character-encoding locale


【解决方案1】:

您的 shebang 开头似乎缺少井号 (#)。创建一个包含此内容的文件(test.sh):

#!/bin/sh 
sed -i "s/\bVAR1\b/Привет, как ты/g" file1.txt

然后使用chmod +x test.sh 使其可执行,会按预期生成一个可执行脚本。

$ file test.sh
test.sh: POSIX shell script text executable, UTF-8 Unicode text

【讨论】:

  • 嗨马库斯,感谢您的回复。是否有任何特定的编辑器或您用来创建 test.sh 文件的东西?我尝试了相同的方法。_#!/bin/sh sed -i "s/\bVAR1\b/Привет, как ты/g" file1.txt_ 并使用记事本保存它 - 编码为 UTF-8。然后尝试使用 file 命令检查文件的格式并得到以下 bash-4.1$ 文件 test.sh test.sh: UTF-8 Unicode (with BOM) text,使用 CRLF 行终止符我运行了 chmod +x 测试。 sh 但它仍然显示
  • 我在 MacOS 上使用了 vim。这篇文章详细说明了这可能是 BOM 的问题。如果有一个选项可以在没有 BOM 的情况下执行 UTF-8,那么应该使用。 stackoverflow.com/questions/19065522/…
  • 谢谢马库斯。它在没有 BOM 的情况下工作。 BOM 是问题所在。你拯救了我的一天
猜你喜欢
  • 2013-02-02
  • 1970-01-01
  • 1970-01-01
  • 2016-11-08
  • 1970-01-01
  • 2017-11-17
  • 2014-10-27
  • 2013-06-11
  • 1970-01-01
相关资源
最近更新 更多