解决shell无法执行的问题
原因1_换行符错误导致
摘要:
Linux 系统,shell 脚本文件内,换行符为 CRLF 导致的,转换为 LF 换行,即可正常运行。
在Notepad++软件上,视图–显示符号–显示行尾符,可看到二者差异,
如下图所示:
转换方法1:Windows 下使用 notepad++
编辑–文档格式转换–转为 Unix(LF)
转换方法2:Linux 下使用 sed 命令
#另存模式 sed -e 's,^M,,g' old.sh > new.sh
#覆盖模式 sed -i 's,^M,,g' old.sh
注意 ^M
的输入方式为:按住Ctrl,按下V,松开V,按下M,松开。
- 不是shift+6,再按M
- 不是shift+6,再按M
- 不是shift+6,再按M
剖析问题来源
- 该 shell 脚本文件在 Windows 系统上创建,或经过 Windows 系统另存;
- 该 shell 脚本通过 git 下载,但 git 配置了不自动转换格式;
- 该 shell 脚本由 Windows 习惯的程序生成。
原因2_执行权限导致
摘要:
shell 脚本由于种种原因,不具备执行的权限,权限问题包括 3 个方面:
- 问题1:缺少 shell 解析器
- 问题2:shell 文件本文的权限
- 问题3:操作系统对 shell 脚本执行的管理
问题1解决方法
这个问题的排查方法可以用命令 sh xxx.sh
来测试,如果手动指定解析器,可以运行脚本的话,那么属于缺少shell解析器的问题,如果仍然无法运行脚本,则不属于问题1。
在 shell 文件开头,添加如下1行代码:
#!/bin/bash
问题2解决方法
通过chmod命令解决,如:
chmod a+x xxx.sh
问题3解决方法
在某些安全性较高的Linux发行版系统中,系统不允许未认证的程序执行,包括脚本。
可尝试,通过系统设置、安全中心等配置,调整安全级别,使其能够运行。
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
相关文章
centos8使用Docker部署Django项目的详细教程
这篇文章主要介绍了在centos8使用Docker部署Django项目的教程,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下2020-05-05Linux下使用killall命令终止进程的8大用法实例详解
Linux 的命令行提供很多命令来杀死进程。这篇文章主要介绍了Linux下使用killall命令终止进程的8大用法,需要的朋友可以参考下2019-04-04Linux下高并发socket最大连接数所受的各种限制(详解)
下面小编就为大家带来一篇Linux下高并发socket最大连接数所受的各种限制(详解)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧2016-11-11使用 DataAnt 监控 Apache APISIX的原理解析
Apache APISIX 是一个开源的云原生 API 网关,作为 API 网关,它兼具动态、实时、高性能等特点,提供了负载均衡、动态上游、灰度发布、服务熔断、身份认证、可观测性等丰富的流量管理功能,这篇文章主要介绍了如何使用 DataAnt 监控 Apache APISIX,需要的朋友可以参考下2022-06-06
最新评论