如何在C#中创建Unix脚本(.sh)文件

本文关键字:脚本 sh 文件 Unix 创建 | 更新日期: 2023-09-27 18:22:09

好吧,所以我正在创建的程序就像是android的桌面恢复。现在,为了执行命令,例如擦除缓存,需要键入命令并将其保存到.sh文件中。当我打开一个像notepad++这样的程序,键入一个命令(即擦除缓存)并将其保存为unix脚本文件(.sh),然后将其加载到我的手机中时,它会毫无问题地执行。然而,当我尝试在我的程序中使用流写入程序并将文件保存为.sh时,我手机上的恢复无法读取它。即使文件看起来完全相同。

好吧,我知道这可能有点令人困惑,但想象一下。

在记事本++上我创建了一个新的文档,输入,擦除缓存,保存为Unix脚本(.sh),并且工作得很好。

在我的程序中

FileInfo fi2 = new FileInfo("flash.sh");
            StreamWriter writebat2 = fi2.AppendText();
            string f = "wipe cache"; 
            writebat2.WriteLine(f);
            writebat2.Close();

现在,它们都生成了一个内容完全相同的文件(flash.sh)。但是,使用我的程序创建的恢复无法读取。有什么想法吗?谢谢

如何在C#中创建Unix脚本(.sh)文件

UNIX文本文件的行尾(使用单个字符'n)和Windows文本文件的行尾(使用两个字符'r'n)之间存在差异。

因此,在Windows中有一个额外的字符,当文件传输到您的Android设备时,这可能是导致您出现问题的原因。

当您在Notepad++中创建文件时,它之所以有效,是因为当您保存为.sh时,它会将其识别为UNIX bash脚本文件类型,并且智能地不会在每行的末尾添加额外的Windows字符。

但是您编写的C#代码确实添加了额外的字符,因为它对输出文件类型没有那种类型的意识。

您需要在没有额外字符的情况下输出文本文件,使用以下内容进行写入操作:

File.WriteAllText(myOutputFile, string.Join("'n", lines));

或者更简单,只需使用write()并自己添加UNIX换行符:

string f = "wipe cache'n";
writebat2.Write(f);