【问题标题】:Can I include a folder relative to the current directory in PATH in Powershell?我可以在 Powershell 的 PATH 中包含一个相对于当前目录的文件夹吗?
【发布时间】:2017-07-24 12:33:01
【问题描述】:

我运行了很多节点项目,并且经常有二进制文件位于:

.\node_modules\.bin

...相对于项目文件夹。我希望能够让PATH 始终包含这些目录,如果它们存在的话。我不想包括其他目录,只是相对于当前目录的目录。我熟悉 Add-PathVariable 来自 PSCX 和其他 Powershell 基础知识,但如何在 PATH 中包含相对于当前目录的文件夹?

编辑:如问题中所述,我希望路径会随着目录的变化而保持更新。这不是简单地问如何使用pwd

【问题讨论】:

  • .$(pwd) 不同。
  • @AnsgarWiechers 您的评论很粗鲁,但您是对的:您可以将相关文件夹添加到 PATH(我没有意识到这一点)。写出来,我会把它标记为正确的。
  • 我认为在此对 SO 进行尽职调查以实际测试问题的主题在提出问题之前。特别是对于拥有近 30k 代表的人。当有人指出疏忽了上述尽职调查时,我一点也不认为这是不礼貌的。 YMMV。
  • @AnsgarWiechers 我考虑过'。'但只是假设'。将立即解决(即,它是静态的而不是动态的)。回复:尽职调查:我使用find-stringprompt 编写了一个有点复杂的脚本,以便在您发布答案评论之前动态执行此操作。你本可以更礼貌地表达同样的观点,同样我希望拥有超过 100K 业力的人会做得更好。

标签: node.js powershell path pscx


【解决方案1】:

您可以在 Env:PATH 中使用相对路径,找到的二进制文件将动态更新

例如:

$env:PATH += ';.\node_modules\.bin'

或使用PowerShell Community Extensions (PSCX):

Add-PathVariable '.\node_modules\.bin'

与使用$(pwd) 不同,. 不会立即解析为绝对路径,因此PATH 始终相对于当前工作目录。

对此进行测试:

$ which uuid
C:\Users\username\Documents\myapp\node_modules\.bin\uuid.cmd

然后更改目录,uuid 现在引用不同目录中的程序:

$ cd ..\blog\
$ which uuid
C:\Users\username\Documents\blog\node_modules\.bin\uuid.cmd

还可以在用户或系统环境中持续更改PATH

[Environment]::SetEnvironmentVariable(($env:PATH + ';.'), 'User')

[Environment]::SetEnvironmentVariable(($env:PATH + ';.'), 'Machine')

安全说明:当输入命令时,Windows 将自动搜索$env:PATH 中的所有目录以查找具有$env:PATHEXT 中列出的扩展名之一的文件,并执行它找到的第一个匹配项。根据您在搜索路径中的确切位置放置 .,它甚至可能取代系统可执行文件。

您可能需要查看how to use package installed locally in node_modules 以了解替代方法。

【讨论】:

    猜你喜欢
    • 2022-01-22
    • 1970-01-01
    • 2021-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多