获取主目录?
Getting home directory?
我试图在脚本中从用户的主目录中获取一个目录。这就是我正在尝试的,但是 ~
被插入为文字而不是扩展到主目录。无论如何让它扩大?如果没有,我可以通过其他方式获取主目录吗?
$mySourceDir = "~/Projects/svn/myProject/trunk" # Single quote also does not expand
cd $mySourceDir
这是在 OSX 上使用 PS 6 beta。
尝试
$mySourceDir = "$env:HOME/Projects/svn/myProject/trunk"
在 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 平台上的工作方式类似。
仅当您确定当前位置是 文件系统 位置时才使用 ~
:
The current location is PowerShell's generalized concept of the current directory: PowerShell generalized the concept of a drive 以包含其他(通常)分层数据存储,例如 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'
解释~
的是驱动提供者,所以~
也在[=35里面起作用=] 和 "..."
- 从文件系统位置,以下命令都相同:
Set-Location ~/Desktop
Set-Location "~/Desktop"
Set-Location '~/Desktop'
- 将此与类似 POSIX 的 shell 进行对比,例如
bash
,其中扩展的 shell ~
,前面,在目标命令看到它之前,但前提是它 未被引用。
我试图在脚本中从用户的主目录中获取一个目录。这就是我正在尝试的,但是 ~
被插入为文字而不是扩展到主目录。无论如何让它扩大?如果没有,我可以通过其他方式获取主目录吗?
$mySourceDir = "~/Projects/svn/myProject/trunk" # Single quote also does not expand
cd $mySourceDir
这是在 OSX 上使用 PS 6 beta。
尝试
$mySourceDir = "$env:HOME/Projects/svn/myProject/trunk"
在 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 平台上的工作方式类似。
仅当您确定当前位置是 文件系统 位置时才使用 ~
:
The current location is PowerShell's generalized concept of the current directory: PowerShell generalized the concept of a drive 以包含其他(通常)分层数据存储,例如 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'
- 一些提供商为
解释
~
的是驱动提供者,所以~
也在[=35里面起作用=] 和"..."
- 从文件系统位置,以下命令都相同:
Set-Location ~/Desktop
Set-Location "~/Desktop"
Set-Location '~/Desktop'
- 将此与类似 POSIX 的 shell 进行对比,例如
bash
,其中扩展的 shell~
,前面,在目标命令看到它之前,但前提是它 未被引用。
- 从文件系统位置,以下命令都相同: