将文件设为可执行文件时,Bash脚本命令损坏

时间:2018-09-23 14:33:24

标签: bash

我正在尝试将以下内容转换为可执行的bash脚本

#!/bin/bash

cd ~/mlpractical
source activate mlp
jupyter notebook

使用上述命令创建一个.rtf文件后,然后从正确的目录执行

chmod u+x filename

但是每次我尝试打开文件时,我都会在第1行得到一个输出告诉我,在第2行上找不到命令,在第2行)有语法错误等。

如何使脚本可执行(可双击)并解决此错误?

2 个答案:

答案 0 :(得分:2)

我不确定是否可以双击脚本(这取决于您的操作系统,而您没有提及正在使用的操作系统)。但是听起来脚本文件是RTF格式的,这肯定会引起麻烦。 Shell脚本必须位于绝对纯Unix样式的文本文件中。

  • 它们不能包含任何格式信息,如RTF,DOC,DOCX等文件中的格式信息。充其量,shell会尝试将格式信息解释为shell命令,并且会出现很多错误。
  • 它们必须具有Unix样式的行尾。如果您使用以DOS / Windows格式保存的文本编辑器,则将have trouble
  • 它们必须使用足够简单的字符编码,外壳程序才能将其视为简单的ASCII。这意味着没有UTF-16。 UTF-8可以,但是不要使用像花括号一样的花哨字符(“”和“”)-坚持使用纯ASCII引号(“”和“”)。而且没有字节顺序标记!

答案 1 :(得分:0)

感谢Gordon,您是对的,所有的错误都清楚地表明,文本格式字符串是传递给Shell的内容,而不只是我想要的纯文本字符串。

我正在使用MacOS环境,并且正在通过文本编辑创建文件,而仅.rtf文件没有.txt选项

我解决了这个问题,

1)使用命令行本身将文本回显到没有扩展名的文件,例如

echo 'text' > filename

2)然后我无法弄清换行符的语法,因此不得不继续添加文本。

echo 'more text' >> filename

3)然后,我在相关目录中进行了以下操作,使其可执行:

chmod u+x filename