源 vs 导出 vs 导出 LD_LIBRARY_PATH

ank*_*540 4 compiling make cmake software-installation

当使用makecmake指令从源代码编译应用程序时,通常会说,

source <some path> <parameter>

export <some text>

此外,很多时间 LD_LIBRARY_PATH出现,与export.

最新的差异sourceexport?为什么我们需要它们?

rid*_*dgy 8

shell 命令sourceexport是完全不同的东西。简而言之:

source

当您以正常方式(例如使用./myscript.shsh myscript.sh)调用 shell 脚本时,它将在其自己的进程上下文(新的进程环境)中执行,因此脚本中设置的所有变量在调用 shell 中都将不可用。使用source命令执行脚本时,它将在调用脚本的上下文中执行。这样你就可以通过调用来设置环境变量source myscript

export

环境变量通常只在当前进程的(本地)上下文中有效。因此,如果您执行请求新进程环境的某些内容(脚本或程序),则在新进程中将看不到本地环境。要将环境值传递给子进程,您必须通过在分配之前“导出”它们export,例如export VAR=value

export LD_LIBRARY_PATH

特殊环境变量LD_LIBRARY_PATH定义了搜索可加载库的路径(类似于该PATH变量,它定义了在哪里查找可执行文件)。默认情况下,在 中搜索库/lib/usr/lib等等。安装在非标准目录(例如/opt/program/lib)中的库只有export LD_LIBRARY_PATH=/opt/program/lib在本示例中额外定义了这些路径时才能加载。您需要在此处导出,因为您的程序运行所在的新进程环境必须知道这一点。


坚持

只要进程在运行,进程环境就存在;这也适用于环境变量(当未明确取消设置时)。如果进程被终止(例如通过关闭终端窗口),通常所有子进程也将被终止并删除环境。更准确地说,这取决于子进程对 的反应SIGHUP。如果没有,它将作为用户进程(例如/sbin/upstart --user)或 init 进程(PID=1)的子进程进一步运行。

让子进程克服父进程被杀死的一种方法是使用nohup命令(请参阅 参考资料man nohup)将它们从父进程中释放,该命令不会传递SIGHUP给子进程,并将进程释放到后台:

nohup <progname> &

将进程与父进程分离,将 STDIN 分配给/dev/null并将 STDOUT分配给./nohup.out