相关疑难解决方法(0)

Bash脚本获取自身完整路径的可靠方法

我有一个Bash脚本需要知道它的完整路径.我试图找到一种广泛兼容的方式来做到这一点,而不会结束相对或时髦的路径.我只需要支持Bash,而不是sh,csh等.

到目前为止我发现了什么:

  1. 地址中获取Bash脚本的源目录的接受答案是获取脚本的路径dirname $0,这很好,但可能会返回相对路径(如.),如果要更改目录中的目录,这是一个问题脚本并使路径仍指向脚本的目录.不过,dirname将成为这个难题的一部分.

  2. OS X的Bash脚本绝对路径 的接受答案(特定于OS X,但答案无论如何)都会给出一个函数,该函数将测试是否$0看起来相对,如果是,则会预先挂起$PWD.但是结果仍然可以包含相对位(虽然总体来说它是绝对的) - 例如,如果脚本t在目录中/usr/bin并且你进入/usr并且你输入bin/../bin/t它来运行它(是的,那是复杂的),你最终会得到/usr/bin/../binas脚本的目录路径.哪个有效,但......

  3. 此页面上readlink解决方案如下所示:

    # Absolute path to this script. /home/user/bin/foo.sh
    SCRIPT=$(readlink -f $0)
    # Absolute path this script is in. /home/user/bin
    SCRIPTPATH=`dirname $SCRIPT`
    
    Run Code Online (Sandbox Code Playgroud)

    但是readlink不是POSIX,显然解决方案依赖于GNU readlink,其中BSD由于某种原因无法工作(我无法访问类似BSD的系统进行检查).

所以,各种方式,但他们都有他们的警告.

什么是更好的方式?"更好"的意思是:

  • 给了我绝对的道路.
  • 即使以复杂的方式调用,也可以获得时髦的位(参见上面#2的评论).(例如,至少要对路径进行适度规范化.)
  • 仅依赖于Bash-isms或几乎肯定会出现在最流行的*nix系统(GNU/Linux,BSD和类似BSD的系统,如OS X等)上的东西.
  • 如果可能,避免调用外部程序(例如,更喜欢Bash内置程序). …

bash path

653
推荐指数
12
解决办法
42万
查看次数

如何在linux中设置环境变量LD_LIBRARY_PATH

我先执行了命令: export LD_LIBRARY_PATH=/usr/local/lib

然后我打开了.bash_profile文件:vi ~/.bash_profile.在这个文件中,我把:

LD_LIBRARY_PATH=/usr/local/lib
export LD_LIBRARY_PATH
Run Code Online (Sandbox Code Playgroud)

然后,如果终端关闭并重新启动,则键入不echo $LD_LIBRARY_PATH显示结果.

如何永久设置路径?

linux environment-variables

183
推荐指数
9
解决办法
77万
查看次数

导出多个 LD_LIBRARY_PATH 的正确方法

我是使用 linux 的新手。根据有关我的项目的指南,我必须多次导出 LD_LIBRARY_PATH,我不确定是否没有覆盖它们。

#Cupti + Tensorflow_CUDAit
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda/extras/CUPTI/lib64

#Mujoco
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/robolab/.mujoco/mujoco200/bin
export MUJOCO_PY_MJPRO_PATH=$HOME/.mujoco/mujoco200/
export MUJOCO_PY_MJKEY_PATH=$HOME/.mujoco/mjkey.txt

#Mujoco_py
export LD_PRELOAD=/usr/lib/x86_64-linux-gnu/libGLEW.so
Run Code Online (Sandbox Code Playgroud)

这是正确的方法还是我覆盖它们?如果是这样,正确的方法是什么?

先感谢您。

linux shell ubuntu-18.04

1
推荐指数
1
解决办法
2882
查看次数

如何在 ubuntu 11.04 中设置 LD_LIBRARY_PATH

我已经看到了许多 LD_LIBRARY_PATH 的链接,但无法获得 LD_LIBRARY_PATH 的确切方法。我在那里使用了 ldd (用于动态库)

linux-gate.so.1 =>  (0x00f84000)
libcrypto.so.0.9.8 => /lib/libcrypto.so.0.9.8 (0x0018c000)
libxml2.so.2 => /usr/local/lib/libxml2.so.2 (0x00318000)
libxmlsec1.so.1 => /usr/local/lib/libxmlsec1.so.1 (0x00caa000)
libprotobuf-c.so.0 => /usr/local/lib/libprotobuf-c.so.0 (0x00957000)
libm.so.6 => /lib/i386-linux-gnu/libm.so.6 (0x00110000)
libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0x009cc000)
libdl.so.2 => /lib/i386-linux-gnu/libdl.so.2 (0x00136000)
libz.so.1 => /lib/i386-linux-gnu/libz.so.1 (0x00b89000)
libxslt.so.1 => /usr/local/lib/libxslt.so.1 (0x0013a000)
librt.so.1 => /lib/i386-linux-gnu/librt.so.1 (0x00172000)
libltdl.so.7 => /usr/lib/libltdl.so.7 (0x0017b000)
/lib/ld-linux.so.2 (0x007d1000)
libpthread.so.0 => /lib/i386-linux-gnu/libpthread.so.0 (0x00d6a000)
Run Code Online (Sandbox Code Playgroud)

请告诉我必须用路径定义的确切方式和位置。

c linux shared-libraries

-1
推荐指数
1
解决办法
1万
查看次数