Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在docker image bash中执行脚本中的本地二进制文件?_Bash_Shell_Docker - Fatal编程技术网

如何在docker image 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

我想使用官方的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
中调用它

编辑 上面的例子有一个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的行上编写它,那么我的最小示例是错误的。我会创造一个更好的错误。