我在 UNIX 系统中的 .profile 文件示例中看到,在给 PATH 变量赋值后,例如PATH=$PATH:.
,然后将其导出export PATH
。
我的问题是2:
- 如果我在给它一个值后不导出PATH,为什么会发生?
PATH=$PATH:.
表示将当前目录添加到 PATH 变量中。但这是否只进行了 1 次?我的意思是它只会添加我的主目录,还是每次更改目录时都会将其添加到PATH?
我在 UNIX 系统中的 .profile 文件示例中看到,在给 PATH 变量赋值后,例如PATH=$PATH:.
,然后将其导出export PATH
。
我的问题是2:
PATH=$PATH:.
表示将当前目录添加到 PATH 变量中。但这是否只进行了 1 次?我的意思是它只会添加我的主目录,还是每次更改目录时都会将其添加到PATH?如果您不导出PATH
,那么当您启动另一个程序(或子外壳程序)时,该程序将不会看到与$PATH
您相同的值。导出它意味着您看到的值也会被您的 shell 生成的子进程看到。
添加.
时PATH
不会扩展为您当前的目录名称。它保持一个.
. 因此,无论您碰巧在哪个当前目录中,都将是您尝试运行程序时搜索可执行文件的目录。
.profile
来源时已经导出。但是,以防万一,无论如何它都会被导出。如果变量没有被导出,它仍然可以在当前 shell 中工作,但它不会被任何子进程继承。.
表示当前目录,无论它是什么,但它永远不会扩展为目录的真实名称(用于pwd
包含在反引号中的用途)。如果更改目录,则当前目录将在路径中。这与其他非类 UNIX 操作系统(Windows 和 DOS)的行为类似,但通常被认为存在安全风险。为了最小化它,至少把它放在 PATH 的末尾,就像你的例子一样。如果您不导出变量,它将保持在正在运行的脚本的本地,即.profile
在这种情况下。这意味着如果您引用$PATH
其他任何地方,它将是空的。
该变量仅在语句执行时设置,即何时.profile
运行。通常,这只会发生一次(当您启动 shell 时)而不是当您更改目录时。