我正面临一个让我发疯的问题。在过去的几个月里,我一直在开发一个基于最近更新的Linux发行版(Openwrt)的项目。我的项目有很多bash脚本,在我的机器上一直运行良好。今天我为我的机器编译了Openwrt的新版本,我安装了bash并且脚本不再起作用了。如果我执行我的脚本./myscript.sh
#!/bin/bash
echo hello
我获得:
-ash: ./myscript.sh: not found
我注意到两个非常奇怪的事实可能会帮助你们了解正在发生的事情:
如果我将第一行从#!/bin/bash
更改为#!/bin/sh
,则执行脚本时没有错误。但是bash似乎已正确安装。以下是opkg info | grep -A 6 -i bash
的结果:
Package: bash Version: 4.3.39-1 Depends: libc, libncurses Status: install user installed Architecture: ramips_24kec Installed-Time: 1460723598
如果我在记事本中打开script.sh,则行尾是CRLF。我学会了使用EOL转换工具将CRLF转换为LF。我保存文件,我关闭它。但我不知道为什么,当我再次打开它时,行尾仍然是CRLF。就好像有些东西让我的脚本保持不正确的行尾。
非常感谢任何帮助
修改
ldd /bin/bash
的结果是
/lib/ld-uClibc.so.0 (0x55b9b000)
libncurses.so.5 => /usr/lib/libncurses.so.5 (0x77d0e000)
libdl.so.0 => /lib/ld-uClibc.so.0 (0x55b9b000)
libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x77ceb000)
libc.so.0 => /lib/ld-uClibc.so.0 (0x55b9b000)
Error relocating /bin/bash: __uClibc_main: symbol not found
Error relocating /bin/bash: fcntl64: symbol not found
Error relocating /bin/bash: __fputc_unlocked: symbol not found
Error relocating /bin/bash: _stdlib_mb_cur_max: symbol not found
Error relocating /bin/bash: __ctype_b: symbol not found
Error relocating /bin/bash: __ctype_tolower: symbol not found
Error relocating /bin/bash: __ctype_toupper: symbol not found
Error relocating /bin/bash: __stdout: symbol not found
答案 0 :(得分:0)
尝试使用dos2unix实用程序转换行结尾。当你说记事本时,你的意思是Windows记事本?这可能会自动将行结尾转换为DOS格式......
答案 1 :(得分:0)
试试这个,使用sh而不是bash
#!/bin/sh
echo "Hello"
exit 0