获取主目录?

24

我正在尝试在脚本中获取用户主目录下的一个目录。这是我的尝试,但是 ~ 被解释为字面意思,而不是扩展到主目录。有没有办法使其扩展?如果没有,我还有其他获取主目录的方法吗?

$mySourceDir = "~/Projects/svn/myProject/trunk" # Single quote also does not expand
cd $mySourceDir

我正在使用OSX上的PS 6测试版。


1
$x = "~/test/" 然后在 Linux 上使用变量引用,我的 PS 6 可以正常工作。 - TessellatingHeckler
1
这与OS X有什么关系? - l'L'l
3
PowerShell现在也可以在几个Unix平台上使用,包括macOS(截至本文撰写时仍处于测试阶段)-请参见https://github.com/PowerShell/PowerShell。话虽如此,手头的问题可以用跨平台的方式来解决。 - mklement0
@l'L'l按照mllement0所说,我实际上正在尝试在OSX上进行此操作。 - Andy
2
谢谢澄清,我不知道有OS X版本,但现在我知道了! - l'L'l
2个回答

31

在PowerShell中,引用当前用户的主目录最稳健的方法是使用自动变量$HOME,如果它是更大路径的一部分,则需要在"..."内:

  • $mySourceDir = "$HOME/Projects/svn/myProject/trunk"; Set-Location $mySourceDir
    (Set-Location是PowerShell的cd等效命令;由于内置别名定义,您也可以使用cd。)

  • 如果您将路径作为参数传递给命令,则根据路径包含的字符,您可以尝试不使用"..."进行封闭,例如:
    Set-Location $HOME/Desktop

  • 适用于Windows和Unix平台,而如果您尝试使用环境变量,如$env:HOME,平台差异会浮出水面。

  • 要了解PowerShell定义的所有自动变量(内置变量),请参阅概念性的about_Automatic_Variables帮助主题(截至本文撰写时,$HOME的描述仅反映了Windows的视角,但$HOME在Unix平台上的工作方式类似)。


只有当您确定当前位置是文件系统位置时才使用~

  • 当前的位置是PowerShell中对当前目录的概括概念:PowerShell将驱动器的概念泛化为包括其他(通常是分层数据存储)如Windows注册表,所有已定义函数的目录(驱动器Function:),变量(Variable)或环境变量(Env:)。

  • 每个这样的驱动器都由一个驱动程序提供者提供,其中文件系统[驱动程序提供者]只是一个实例。

  • ~是一个特定于驱动程序提供者的概念,因此仅使用~,而不带隐式地引用驱动程序提供程序的明确引用,则会引用由当前位置下的提供程序所定义的主目录位置

    • 一些提供程序不为~提供默认值,导致尝试使用它失败;例如,对于Environment驱动程序提供程序及其Env:驱动程序,情况就是这样:
      Set-Location Env:; Set-Location ~会导致错误
      此提供程序的主目录未设置。要设置主目录,请调用“(get-psprovider 'Environment').Home = 'path'”
  • 驱动程序提供程序解释~,所以~也适用于'...'"..."

    • 从文件系统位置,以下命令都可以使用相同的方式:
      • Set-Location ~/Desktop
      • Set-Location "~/Desktop"
      • Set-Location '~/Desktop'
  • 与类似 POSIX 的 shell(例如 bash)相比,它是 shell 在目标命令看到它之前进行 ~ 的展开,但只有在未被引用时才进行。

0

尝试

$mySourceDir = "$env:HOME/Projects/svn/myProject/trunk"

1
“$ HOME /…”不就可以了吗?而且您在命令的末尾有两个双引号… - l'L'l
2
我没有$env:home。只有HOMEPATH和HOMEDRIVE。 - Matt
1
@Matt,这在_Windows_上是正确的,但HOME在类Unix平台(macOS和Linux)上是环境变量,并且问题提到了macOS(OSX)。话虽如此,使用PowerShell的自动$HOME变量可以实现跨平台解决方案。 - mklement0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接