我正在阅读一本 Linux shell 脚本书,并发现以下警告:
“命令替换会创建所谓的子外壳来运行封闭的命令。子外壳是从运行脚本的外壳生成的单独子外壳。因此,您在脚本中创建的任何变量都不能用于子外壳命令”。
我尝试在当前 bash shell 的 CLI 中创建一个变量,然后进入子 shell 检查是否可以在屏幕上打印它。所以是的,我做不到,似乎是根据上面的引文。但是,我已经使用命令替换运行了以下脚本:
#!/bin/bash
var=5.5555
ans=$(echo $var)
echo $ans
Run Code Online (Sandbox Code Playgroud)
结果是:
5.5555
Run Code Online (Sandbox Code Playgroud)
据我了解,它不应该打印 var 的值,因为子外壳不应该能够“看到它”。为什么会发生?
我有一个名为reg的可执行文件,其中包含以下共享库依赖项:
[terminal]$ ldd ./reg
linux-vdso.so.1 => (0x00007ffc40d90000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x0000003be0c00000)
/usr/dep/packages/opt/intel/mkl/10.0.2.018/lib/em64t/libmkl_intel_lp64.so => not found
Run Code Online (Sandbox Code Playgroud)
执行二进制文件时,我得到以下信息:
[terminal]$ ./reg
./reg: error while loading shared libraries: /usr/dep/packages/opt/intel/mkl/10.0.2.018/lib/em64t/libmkl_intel_lp64.so: cannot open shared object file: No such file or directory.
Run Code Online (Sandbox Code Playgroud)
问题是我没有创建指定目录路径并将库放在那里的管理权限。此外,我没有源代码,所以我也无法重新编译它,但我确实将libmkl_intel_lp64.so库存储在其他地方。我尝试使用LD_PRELOAD环境变量,但它仍然需要该特定位置的库。有没有办法解决这个问题?
谢谢!