我想使用官方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
版本问题。
答案 0 :(得分:1)
好像你正在寻找这里的文件。
cat <<\: >script
#!/usr/local/bin/bash
./bashbug --version
:
另外,通常不推荐使用.sh
扩展名。