如何在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)。但是,使用我的程序创建的恢复无法读取。有什么想法吗?谢谢
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);