PowerShell在运行& $profile时未重新加载

ehxuflar  于 2023-08-05  发布在  Shell
关注(0)|答案(1)|浏览(119)

在Stack Overflow的第一篇文章中,请忍受我……
我更新我的配置文件,以创建/调整自定义功能,因为我完成了我的日常工作。将编辑保存到我的配置文件后,在当前PowerShell会话中运行& $profile后,新的/更新的函数无法根据新配置文件工作。它仅在关闭当前会话并重新打开新的PowerShell示例后才能工作。我正在使用PowerShell 7.3.5和Windows终端。
比如...
在我的个人资料中,我有一些自定义的功能,可以打开下载到我的下载文件夹的最后X个文件。在不输入任何内容的情况下运行此命令open_dnld将启动此文件夹中的最后一个文件。运行此命令,输入为2 open_dnld(2),将启动我最后2个文件的处理。下面是函数定义:
旧功能:

Function open_dnld  ([Int16] $NumFiles = 1) {foreach($file in Get-ChildItem ~/Downloads
                                             | Sort-Object LastWriteTime -Descending
                                             | Select-Object -First $NumFiles){
      Start-Process $file
  }
}

字符串
为了测试,我刚刚更新了函数,$NumFiles的默认值为2,如下所示。在运行& $profileopen_dnld(2)之后,函数根据前面的定义工作,只打开1个文件。但是,当我关闭当前的终端会话,使用Windows终端打开一个新的PowerShell示例,然后运行open_dnld(2)命令时,该函数现在根据新的函数定义工作。
更新功能:

Function open_dnld  ([Int16] $NumFiles = 2) {foreach($file in Get-ChildItem ~/Downloads
                                             | Sort-Object LastWriteTime -Descending
                                             | Select-Object -First $NumFiles){
      Start-Process $file
  }
}


你知道我做错了什么吗?

hts6caw3

hts6caw31#

要重新加载修改后的$PROFILE file,必须使用.,即点源运算符:

. $PROFILE

字符串
相比之下,&,调用操作符在 child 范围内运行脚本,这意味着任何别名,函数,...它包含的内容仅对该脚本可见,并在脚本结束时退出范围。
换句话说:运行& $PROFILE会破坏配置文件的真正目的:定义别名、函数...在 caller 的作用域中-只有.这样做。
详情请参见this answer

相关问题