我将从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然后再次保存它而不做任何事情。它的工作原理
答案 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