Bash脚本不起作用。也许是EOL问题?

时间:2016-04-15 15:31:38

标签: linux bash shell openwrt eol

我正面临一个让我发疯的问题。在过去的几个月里,我一直在开发一个基于最近更新的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

2 个答案:

答案 0 :(得分:0)

尝试使用dos2unix实用程序转换行结尾。当你说记事本时,你的意思是Windows记事本?这可能会自动将行结尾转换为DOS格式......

答案 1 :(得分:0)

试试这个,使用sh而不是bash

#!/bin/sh

echo "Hello"
exit 0