获取主页目录?

时间:2017-06-15 19:35:23

标签: macos powershell powershell-core

我正在尝试从脚本中的用户主目录中获取目录。这就是我正在尝试的,但~作为文字插入而不是扩展到主目录。反正有没有扩大它?如果没有,我可以用另一种方式获得主目录吗?

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

这是在OSX上使用PS 6测试版。

2 个答案:

答案 0 :(得分:5)

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

  • $mySourceDir = "$HOME/Projects/svn/myProject/trunk"; Set-Location $mySourceDir
    Set-Location是PowerShell的cd等效项;由于内置的​​别名定义,您也可以使用cd。)
  • 如果您将路径作为参数传递给命令,您可以在没有封闭"..."的情况下离开,取决于路径包含的字符;例如,
    Set-Location $HOME/Desktop

  • 适用于Windows和Unix平台,而如果您尝试使用环境变量(例如$env:HOME),则会出现平台差异。< / p>

  • 要了解PowerShell定义的所有自动变量(内置变量),请运行Get-Help about_Automatic_Variables(截至撰写本文时,$HOME的说明仅反映 Windows < / em> perspective,但$HOME在Unix平台上的工作方式类似。)

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

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

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

  • ~ 特定于驱动器提供商的概念,所以只使用~,而没有明确引用驱动器提供商,是指由当前位置所在的提供商定义的家庭位置

    • 某些提供商为~代表的内容提供无默认,导致尝试使用它失败;例如,Environment驱动器提供商及其Env:驱动器就是这种情况:
      Set-Location Env:; Set-Location ~会导致错误 Home location for this provider is not set. To set the home location, call "(get-psprovider 'Environment').Home = 'path'
  • 驱动程序提供商解释~,因此 ~也适用于'...'"..." < /强>

    • 从文件系统位置,以下命令的工作方式相同:
      • Set-Location ~/Desktop
      • Set-Location "~/Desktop"
      • Set-Location '~/Desktop'
    • 将此与类似POSIX的shell(例如bash)进行对比,其中 shell 在目标命令看到它之前预先展开~,但仅限于echo "all done creating tables" >> ${SUMAN_DEBUG_LOG_PATH} 如果未加引号

答案 1 :(得分:0)

尝试

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