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