我将从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
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然后再次保存它而不做任何事情.有用
解决方法:
我将在下面总结您需要采取的步骤,以便其他用户可以轻松看到需要做的事情:
首先,您需要在“#!”之后检查脚本是否有正确的解释路径.在第一行.这应该是:
#!/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