Я пишу сценарии PowerShell, которые вызывают другие сценарии PowerShell с помощью & .\other\script.ps1
, но обратная косая черта \
, как я полагаю, относится к Windows, и я хочу, чтобы мои сценарии работали на разных платформах.
Я заметил, что PowerShell в Windows принимает & ./other/script.ps1
, но это может быть случайно. ВСЕГДА ли PowerShell будет переводить мои символы обратной косой черты на хост-платформу?
Каков наилучший подход к кросс-платформенной обработке разделителей путей в PowerShell?
По моему опыту, Windows PowerShell с радостью принимает либо \
, либо /
в качестве разделителя пути, поэтому один из способов быть кросс-платформенным — всегда использовать /
.
В качестве альтернативы вы можете использовать командлеты Path
для обработки путей построения, например:
Join-Path -Path $Pwd -ChildPath (Join-Path -Path 'Other' -ChildPath 'script.ps1')
Или, чтобы получить путь к файлу в текущем каталоге:
Resolve-Path test.txt
Командлеты пути:
~> get-command *-path* | Select Name
Name
----
Convert-Path
Join-Path
Resolve-Path
Split-Path
Test-Path
У меня недостаточно кредитов, чтобы добавить комментарий к принятому ответу @mark-wragg, но я просто хочу указать, что начал использовать косую черту только в кроссплатформенных сценариях и т. д. и столкнулся с проблемой с символическими ссылками.
Например, запустить
new-item -itemtype SymbolicLink -path TestScript8.ps1 -target ./TestScript.ps1
и вы не сможете открыть TestScript8.ps1
в VS Code на Windows.
Вы обнаружите, что люди по-прежнему чаще всего используют что-то вроде
[IO.Path]::Combine('.', 'other', 'script.ps1')
, даже если есть новые удобные функции добавлены вJoin-Path
, начиная с Powershell 6.