centos 系统下sh脚本无法执行的问题处理
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了centos 系统下sh脚本无法执行的问题处理相关的知识,希望对你有一定的参考价值。
参考技术A 新的系统遇到奇怪的问题,看门狗脚本无法正常运行,提示如下错误:relocation error: /lib/libpthread.so.0: symbol h_errno, version GLIBC_PRIVATE not defined in file libc.so.6 with link time reference。
进入/usr/lib64目录下,发现软连接 libpthread.so.0-->libpthread-2.17.so.
于是删除libpthread.so.0, 设想从自己运行程序的当前目录拷贝一个libpthread.so.0 覆盖。结果无法执行cp拷贝命令,提示缺少libpthread.so.0. 于是恢复原来的libpthread.so.0, 然后在执行cp强制覆盖命令,结果导致了服务器重启。
最后,将自己运行程序的libpthread.so.0 重命名为libpthread.so.1, 拷贝到/usr/lib64目录下。
然后新建软连接 ln -s libpthread.so.1 libpthread.so.0 .
此时在执行sh看门狗脚本,此时提示libresolv.so.2与GLIBC不兼容。
从新从自己运行的程序路径下的libresolv.so.2重命名为libresolv.so.3. 将libresolv.so.3拷贝到/usr/lib64路径下。
删除之前软连接libresolv.so.2。 重新建立软连接 ln -s libresolv.so.3 libresolv.so.2
现在再执行脚本,脚本运行正常。
dos下编辑过sh脚本后无法运行
情景:
同样的的脚本,在不同的机器下运行有的可以成功,有的运行失败,
前提:sh脚本windos下编辑过。
脚本在windows上修改之后,在每行尾部多了个 ^M,导致sh脚本在执行的时候可能shbang解析不了,导致脚本执行不了
报错 Syntax error: “(” unexpected (expecting “then”) 语法解析错误
解决:
在Linux查看^M,需要使用如下命令:
vim下 :e ++ff=unix %
去掉^M的方法:
1.在 Vim 的命令模式中输入 :%s/^M$//g 后,回车即会自动删除该文件中的所有 ^M 字符。
^M 注意要用 Ctrl + V Ctrl + M 来输入
2.cat filename1 | tr -d "
" > newfile
- sed -e "s/^V^M//" filename > outputfilename
4.tr -d ‘ 15‘ < filename> newfile
简单的,直接使用dos2unix, 将dos下的文件转换成unix文件,可以将后面的^M去掉。
以上是关于centos 系统下sh脚本无法执行的问题处理的主要内容,如果未能解决你的问题,请参考以下文章
-bash: ./centos-7.6.sh: /bin/bash^M: bad interpreter问题解决
ubuntu 下执行脚本报错 [: 10: unexpected operator