如何在docker image bash中执行脚本中的本地二进制文件?
我想使用官方的bash来运行单元测试,但无法在脚本中执行任何本地文件。以下是我想做的一个简单示例:如何在docker image bash中执行脚本中的本地二进制文件?,bash,shell,docker,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 ba
$ 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
中调用它
编辑
上面的例子有一个bug。这是由公认的答案确定的
我发现我最初的问题是链接依赖性的问题,它输出:
./exec_test.sh: line 30: ./test: No such file or directory
当我在test
上调用ldd
时,我得到:
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的版本问题。似乎您正在寻找一个here文档
cat <<\: >script
#!/usr/local/bin/bash
./bashbug --version
:
cat如果运行cat script.sh
,问题将立即显现出来。您需要将命令放在单独的一行上运行,而现在您只需在带有shebang的行上编写它,那么我的最小示例是错误的。我会创造一个更好的错误。