Linux 下关于 .sh文件运行的问题
Date: 2020/03/21
Author: CW
前几天对C++下实现的 NMS(非极大值抑制)进行编译时,需要运行 make.sh 文件,出现了一些小问题,问题虽小,但为了日后能够不被这些小鸡毛蒜皮的杂事浪费人生,特在此进行记录,作为问题手册。
运行方式
以当前目录下文件名为 make.sh 为例:
i). ./make.sh;
ii). sh make.sh
可能出现的问题
还是以当前目录下文件名为 make.sh 为例:
i). -bash: ./make.sh: Permission denied
在linux终端输入 ls -al,可以看到形如 -rwx-r--r-- (一共10个参数)的结果,其中 r、w、x 分别代表可读、可写、可执行,第2-4个参数代表 user 权限,第 5-7 个参数代表 group 权限,最后的第 8-10 个参数代表 others 权限,而第1个参数和权限无关。
如果该问题发生了,那么正常情况下,可以看到 make.sh 对应的结果应该没有执行权限。于是,解决方式之一是输入 chmod 777 make.sh 提高权限,使得所有人都对该文件拥有读写和执行权限(rwx 占3位,若拥有所有权限则是,每个7分别代表user、group、others)。
ii). /usr/bin/env: "bash\r": No such file or directory
通常是由于文件中多了 \r 这个字符,在linux终端下,输出 \r 会什么都不显示,只是把光标移到行首。这样,文件中第一行是 /usr/bin/env bash,接着遇到 \r 后,光标就会被移到行首。
解决方式之一是用 vi 打开文件,重新设置下文件格式:
1). vi make.sh;
2). :set ff,然后回车;
3). :set ff=unix;
4). :wq!
注意以上2)、3)、4)均有冒号。