Windows下创建的sh文件上传到Unix环境无法执行的问题

场景

在Windows下用sublime text 3创建了sh文件用于跑定时脚本任务,但是上传到Unix服务器之后发现并没有被执行到。手动执行,发现报错:
报错信息
看到,换行的同时,把shell命令给覆盖了一部分。
vim 对应文件,执行:set ff 命令,发现fileformat=dos 表示这是DOS格式的文件

测试

同时执行原先在Unix环境下创建的sh文件,则一切正常。

找到原因

确定原因,是因为在Windows系统下创建的sh文件的换行格式和Unix系统不同,导致Unix系统不能识别

解决方案

经过Google,百度blabla,归纳出三种解决方案:
一、从源头解决问题:用sublime text 3创建出现的问题,就从st3上去解决。

  1. Perferences->Settings->User,添加配置”default_line_ending”: “unix”,保存
  2. 将出现问题的sh文件一个个删除,再重新写入shell命令,保存。
    优点:一劳永逸,以后使用st3创建的sh文件直接上传到Unix服务器就可以直接执行,而不会出现问题了。
    缺点:一个个删除文件再重新创建太麻烦了点。- -!!

二、用dos2unix命令

dos2unix file.sh

优点:一次性可以修复所有文件的换行格式问题
缺点:服务器上修改文件格式,如果有用到git或者SVN版本控制软件,可能导致服务器上的sh文件版本改变,下次从本地上传文件,需要先还原这次修改的内容才可以,还是别这么干吧。。

三、用:set ff=unix命令

:set ff=unix

:set fileformat=unix

优点:修改个别文件,不会误操作(唯一能想到的优点)
缺点:(跟dos2unix命令的缺点一样)

四、最佳方案:结合方案一,再使用sed命令

  1. st3设置Perferences->Settings->User,添加配置”default_line_ending”: “unix”,保存
  2. 本地虚拟机终端使用sed命令sed -i "s/\r//" file.sh

优点:一劳永逸且修改方便

结果

完美解决,再执行sh file.sh,发现正常运行,一切那么美好。。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值