关于路径变量UNIX

关于路径变量UNIX,unix,Unix,我在UNIX系统中的.profile文件示例中看到,在为路径变量(例如,PATH=$PATH:.)给定一个值后,它被导出export PATH 我的问题是: 如果在给路径赋值后不导出路径,为什么会发生这种情况 PATH=$PATH:。表示当前目录已添加到PATH变量。但这只做了一次吗?我的意思是,它只是添加我的主目录,还是每次我更改目录时,它都会将其添加到路径 如果不导出变量,它将保持在正在运行的脚本的本地,即在本例中为.profile。这意味着,如果在其他任何地方引用$PATH,它将为空 该变

我在UNIX系统中的.profile文件示例中看到,在为路径变量(例如,
PATH=$PATH:.
)给定一个值后,它被导出
export PATH

我的问题是:

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

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


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

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

    添加到
    路径
    时不会扩展到当前目录名。它保持一个
    。因此,无论您当前所在的目录是什么,当您尝试运行程序时,都会在其中搜索可执行文件

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

  • 只是一个警告。不要加。走这条路!!它表示当前目录,并且始终表示它,即使您更改了目录。这意味着,如果有人创建了一个具有常用名称(如ls)的程序,并将其放入他们有写访问权限的目录中。(很明显,他们无法将其放入/bin),如果您切换到该目录并尝试运行ls,它可能会运行恶意版本,这(显然)是一种安全风险。