2

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

我的问题是2:

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

3 回答 3

4

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

添加.PATH不会扩展为您当前的目录名称。它保持一个.. 因此,无论您碰巧在哪个当前目录中,都将是您尝试运行程序时搜索可执行文件的目录。

于 2013-07-24T07:50:32.733 回答
3
  1. 大概什么都没有。导出变量后,即使重新分配,它也会继续导出。并且预计 PATH 在.profile来源时已经导出。但是,以防万一,无论如何它都会被导出。如果变量没有被导出,它仍然可以在当前 shell 中工作,但它不会被任何子进程继承。
  2. .表示当前目录,无论它是什么,但它永远不会扩展为目录的真实名称(用于pwd包含在反引号中的用途)。如果更改目录,则当前目录将在路径中。这与其他非类 UNIX 操作系统(Windows 和 DOS)的行为类似,但通常被认为存在安全风险。为了最小化它,至少把它放在 PATH 的末尾,就像你的例子一样。
于 2013-07-24T07:55:28.500 回答
0

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

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

于 2013-07-24T07:50:30.203 回答