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

use*_*960 3 linux windows shell scripting encoding

我将从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
Run Code Online (Sandbox Code Playgroud)

我通过在仅包含的Linux框中执行另一个.sh文件尝试了一个解决方案

#!/bin/bash
Run Code Online (Sandbox Code Playgroud)

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

date
hostname
Run Code Online (Sandbox Code Playgroud)

然后我将文件从windows框附加到linux上

cat windows.sh >> linux.sh
Run Code Online (Sandbox Code Playgroud)

如果我运行linux.sh它不起作用.它说错误如:

./linuxh.sh: line 2 $'date\r':command not found
./linuxh.sh: line 2 $'hostname\r':command not found
Run Code Online (Sandbox Code Playgroud)

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

Mar*_*ell 5

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

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

#!/bin/bash
Run Code Online (Sandbox Code Playgroud)

要么

#!/usr/bin/bash
Run Code Online (Sandbox Code Playgroud)

你可以输入以下内容找到哪个是正确的:

which bash 
Run Code Online (Sandbox Code Playgroud)

在你的Linux机器上.

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

dos2unix yourscript
Run Code Online (Sandbox Code Playgroud)

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

cat -vet yourfile
Run Code Online (Sandbox Code Playgroud)

要么

sed -n l yourfile
Run Code Online (Sandbox Code Playgroud)

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

chmod +x yourscript
Run Code Online (Sandbox Code Playgroud)

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

./yourscript
Run Code Online (Sandbox Code Playgroud)

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

/some/directory/some/where/yourscript
Run Code Online (Sandbox Code Playgroud)