关于PATH变量UNIX

时间:2013-07-24 07:46:24

标签: unix

我在UNIX系统中的.profile文件示例中看到,在给PATH变量赋值之后,例如PATH=$PATH:.然后导出export PATH

我的问题是2:

  1. 如果在给出值后不导出PATH,为什么会发生?
  2. PATH=$PATH:.表示当前目录已添加到PATH变量中。但这只做了一次吗?我的意思是它只是添加我的主目录,或者每次更改目录时都会将其添加到PATH?

3 个答案:

答案 0 :(得分:4)

如果您不导出PATH,那么当您启动另一个程序(或子shell)时,该程序将看不到您拥有的$PATH的相同值。导出它意味着您看到的值也会被您的shell生成的子进程看到。

.添加到PATH时,如果添加.,则不会扩展到当前目录名称。它保持{{1}}。因此,无论您当前所在的目录是什么,都会在您尝试运行程序时搜索可执行文件。

答案 1 :(得分:3)

  1. 可能没什么。导出变量后,即使重新分配,也会继续导出。预计在.profile来源时已导出PATH。但是,为了以防万一,无论如何它都会被导出。如果未导出变量,它仍然可以在当前shell中工作,但它不会被任何子进程继承。
  2. .表示当前目录,无论它是什么,但它永远不会扩展到目录的真实名称(对于后面引号括起来的用途pwd)。如果更改目录,则当前目录将位于路径中。这类似于其他非类UNIX操作系统(Windows和DOS)的行为,但通常被认为是安全风险。要最小化它,至少将它放在PATH的末尾,如您的示例所示。

答案 2 :(得分:0)

如果您不导出变量,它将保持在正在运行的脚本的本地,即在这种情况下为.profile。这意味着如果您在其他任何地方引用$PATH,它将为空。

仅在执行语句时设置变量,即运行.profile时。通常,这只会发生一次(当你启动shell时),而不是在你更改目录时。