【问题标题】:how to convert a text/plain to text/x.shellscript如何将 text/plain 转换为 text/x.shellscript
【发布时间】:2014-02-14 09:23:21
【问题描述】:

我将从 Windows 机器创建的 .sh 文件发送到 linux,以便我可以在那里运行它。问题是我不断收到一个称为错误解释器的错误。但是当我在 linux 机器上编写 shell 脚本时,它运行没有问题,即使它与从 windows 机器发送的代码相同。经过我的调查,我发现windows机器.sh脚本是一个文本/纯文件(使用文件-bi),而来自linux机器的另一个是一个text/x.shellscript。有没有办法将 text/plain 转换为 text/x.shellscript?谢谢

这是脚本:

#!/bin/bash

date
sudo apt-get update

我尝试了一个解决方案,方法是在一个仅包含

的 linux 框中创建另一个 .sh 文件
#!/bin/bash

然后windows机器只发送了一个包含测试命令的文件,例如:

date
hostname

然后我用

将文件从 windows 框中附加到 linux 中
cat windows.sh >> linux.sh

如果我运行 linux.sh,它就不起作用。它说的错误如下:

./linuxh.sh: line 2 $'date\r':command not found
./linuxh.sh: line 2 $'hostname\r':command not found

但是,如果我打开 Linux.sh 然后再次保存它而不做任何事情。有效

【问题讨论】:

  • 我怀疑第一行的 shell 路径错误。给我们看剧本怎么样?
  • 我说的是“请给我们看剧本”,而不是“剧本是在哪里制作的?”...
  • @MarkSetchell 对这种误解深表歉意。我用 sript 编辑了我的帖子。
  • 请在脚本每行的开头放置 4 个空格,以便格式正确。
  • 第一行应该是“#!/bin/bash”或者“#!/usr/bin/bash”

标签: linux windows shell encoding scripting


【解决方案1】:

我在下面总结了您需要采取的步骤,以便其他用户可以轻松地看到需要做什么:

首先,您需要检查您的脚本在“#!”之后是否有正确的解释器路径。在第一行。这应该是:

#!/bin/bash

#!/usr/bin/bash

您可以通过键入以下内容找到正确的:

which bash 

在您的 Linux 机器上。

其次,您需要确保在您的 Linux 机器运行脚本之前,删除行尾的任何 Windows 回车符(或“^M”)。你可以这样做:

dos2unix yourscript

仅供参考,您可以使用以下方法在 Linux 中轻松查看奇怪的字符,例如 TAB 或换行符或回车:

cat -vet yourfile

sed -n l yourfile

第三,你需要确保你的脚本在 Linux 上是可执行的,像这样使用 chmod:

chmod +x yourscript

最后,当您完成所有这些后,您需要将脚本所在的目录添加到您的 PATH 变量中(并导出它),或者如果您的脚本在当前脚本中,则像这样提供脚本的完整路径目录:

./yourscript

如果它位于其他地方,或者像这样

/some/directory/some/where/yourscript

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-11-09
    • 1970-01-01
    • 2011-12-10
    • 1970-01-01
    • 1970-01-01
    • 2011-05-25
    • 2012-09-11
    • 2021-08-04
    相关资源
    最近更新 更多