如何将text / plain转换为text / x.shellscript

时间:2014-01-23 17:05:11

标签: linux windows shell encoding scripting

我将从windows机器创建的.sh文件发送到linux,以便我可以在那里运行它。问题是我继续得到一个名为bad interpreter的错误。但是当我在linux机器上编写shell脚本时,它运行时没有任何问题,即使它与从windows机器发送的代码具有相同的代码。经过我的调查,我发现windows machine .sh脚本是一个text / plain文件(使用文件-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然后再次保存它而不做任何事情。它的工作原理

1 个答案:

答案 0 :(得分:5)

我总结了您需要采取的步骤,以便其他用户可以轻松了解需要做什么:

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

#!/bin/bash

#!/usr/bin/bash

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

which bash 
在你的Linux机器上

其次,您需要确保在预期Linux框运行脚本之前,删除行末尾的任何Windows回车符(或#34; ^ M")。你可以这样做:

dos2unix yourscript

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

cat -vet yourfile

sed -n l yourfile

第三,您需要确保您的脚本在Linux上可执行,使用chmod,如下所示:

chmod +x yourscript

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

./yourscript

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

/some/directory/some/where/yourscript