如何在docker image bash的脚本中执行本地二进制文件?

时间:2018-06-01 20:09:42

标签: bash shell docker

我想使用官方bash来运行我的单元测试但不能在脚本中执行任何本地文件。这是我想要做的最小例子:

$ docker run -it bash
bash-4.4# cd /usr/local/bin/
bash-4.4# ./bashbug --version
GNU bashbug, version 4.4.19-release
bash-4.4# echo \#\!/usr/local/bin/bash \
> ./bashbug --version > script.sh
bash-4.4# chmod a+x script.sh
bash-4.4# ./script.sh
/usr/local/bin/bash: ./bashbug --version: No such file or directory
bash-4.4#

我安装的程序之一(/usr/local/bin/bashbug)来说明问题。如您所见,您可以直接执行./bashbug,但不能在执行bash脚本时执行。如何在script.sh内调用它?

修改

上面的示例有一个错误。这是由接受的答案确定的。

我发现原来的问题是链接依赖性问题,输出:

./exec_test.sh: line 30: ./test: No such file or directory

当我在ldd上致电test时,我得到了:

ldd test
    /lib64/ld-linux-x86-64.so.2 (0x7fe7ad476000)
    libdl.so.2 => /lib64/ld-linux-x86-64.so.2 (0x7fe7ad476000)
    libpthread.so.0 => /lib64/ld-linux-x86-64.so.2 (0x7fe7ad476000)
    libstdc++.so.6 => /path/bin/gcc-8.1.0/debug/libstdc++.so.6 (0x7fe7ac855000)
    libm.so.6 => /lib64/ld-linux-x86-64.so.2 (0x7fe7ad476000)
    libgcc_s.so.1 => /path/bin/gcc-8.1.0/debug/libgcc_s.so.1 (0x7fe7ac63d000)
    libc.so.6 => /lib64/ld-linux-x86-64.so.2 (0x7fe7ad476000)
    ld-linux-x86-64.so.2 => /path/bin/gcc-8.1.0/debug/ld-linux-x86-64.so.2 (0x7fe7ab49b000)
    libboost_system.so.1.67.0 => /path/bin/gcc-8.1.0/debug/libboost_system.so.1.67.0 (0x7fe7ab291000)
Error relocating /path/bin/gcc-8.1.0/debug/libstdc++.so.6: __cxa_thread_atexit_impl: symbol not found
Error relocating /path/bin/gcc-8.1.0/debug/libgcc_s.so.1: __cpu_indicator_init: symbol not found
Error relocating /path/bin/gcc-8.1.0/debug/libgcc_s.so.1: __cpu_model: symbol not found

可能是glibc版本问题。

1 个答案:

答案 0 :(得分:1)

好像你正在寻找这里的文件。

cat <<\: >script
#!/usr/local/bin/bash
./bashbug --version
:

另外,通常不推荐使用.sh扩展名。