Linux运行脚本报错:
badinterpreter:Nosuchfileordirectory
但脚本是存在的
是不是在windows下编写的脚本,然后在上传到linux服务器.
原因:在DOS/windows里,文本文件的换行符为rn,而在nix系统里则为n,所以DOS/Windows里编辑过的文本文件到了nix里,每一行都多了个^M。
解决:1)重新在linux下编写脚本;2)vi:%s/r//g:%s/^M//g(^M输入用Ctrl+v,Ctrl+m)附:sh-x脚本文件名,可以单步执行并回显结果,有助于排查复杂脚本问题
把脚本贴出来哈,看第一行开头为#!
准备好你要执行的脚本start.sh,例:
#!/bin/bash
DIR=/home
echo "dididi..." > $DIR/files.txt
注意:记得给文件添加执行权限
chmod +x start.sh
在重启启动文件/etc/rc.local中加入你要启动文件的绝对路径
– 进入文件命令,然后添加执行脚本的绝对路径
vim /etc/rc.local
这时让Linux重启时执行相应脚本的工作已完成,可以直接重启测试。但可能有些小伙伴重启之后发现脚本并没有执行,这就有可能是rc.local文件没有执行权限。
4.先查看/etc/rc.local的执行权限 ls -l /etc/rc.local
5. 再查看/etc/rc.d/rc.local的执行权限 ls -l /etc/rc.d/rc.local
6. 给文件添加执行权限
chmod +x /etc/rc.d/rc.local
7 这时再次重启就执行脚本了
Linux重启不执行rc.local是引用了作者: 码农有道 文章。
根据参考资料0和1,可知当文本文件具有可执行属性时,需要选择一个程序来解释执行脚本中的文本行。因此,运行脚本时需要注意选择正确的程序进行解释执行。如果确认脚本文件存在且代码编写正确,那么问题可能是由于缺少可执行属性或者选择了错误的程序进行解释执行导致的。具体解决步骤如下:
可执行属性可以使用chmod
命令添加。例如,如果脚本文件名为test.sh
,可以使用以下命令添加可执行属性:
chmod +x test.sh
根据脚本文件的类型和内容选择合适的程序进行解释执行。例如,如果脚本文件为Bash脚本,则应该使用Bash解释器执行。可以在脚本文件的第一行添加注释来指定使用哪个解释器。例如,如果要使用Bash解释器执行脚本文件,可以在脚本文件的第一行添加以下注释:
1 |
|
其中/usr/bin/env
是通用解释器,它会在系统的PATH环境变量中查找指定的解释器。在本例中,会查找Bash解释器并使用它来执行脚本。
如果选择了正确的程序进行解释执行,那么可能是因为该程序没有安装或者没有在系统的PATH环境变量中。可以使用which
命令来确认程序是否存在。例如,如果要确认Bash解释器是否存在,可以使用以下命令:
which bash
如果该命令没有输出任何内容,则表示Bash解释器没有安装或者没有在系统的PATH环境变量中。需要先安装该程序或者将其添加到PATH环境变量中。
如果以上步骤都没有解决问题,则可能是因为脚本文件不存在或者文件名错误。可以使用ls
命令确认脚本文件是否存在,并且文件名是否正确。
如果以上步骤都不能解决问题,那么可能是由于其他原因引起的,需要进一步排查。