👻
pwshの<を使ったファイルからの入力の受け取り
結論からいうとできません。
下記のように書いてください。
# github cliを使ってjsonファイルから
# azureの環境変数を設定する場合
# pwsh では<が使えないのでそれぞれのOSのデフォルトのシェルを呼び出す。
# -eq UnixでLinux系も吸収できてる
if ($PSVersionTable.Platform -eq "Unix") {
/bin/sh -c "gh secret set AZURE_CREDENTIALS --repo $repo < $($principal_json.FullName)"
} else {
# cmd実行用のファイルを作成
New-TemporaryFile | Set-Variable tempfile -Scope local -Option Constant
($tempfile.FullName -replace "\..*$",".bat") | Set-Variable tempbat_path -Scope local -Option Constant
Rename-Item $tempfile.FullName -NewName $tempbat_path
Write-Output "gh secret set AZURE_CREDENTIALS --repo $repo < $($principal_json.FullName)" | Set-Content -Path $tempbat_path
# 下のように必ずWorkingDirectoryを指定すること
# cmdはディレクトリを跨ぐ処理ができないため。
Start-Process $tempbat_path -WorkingDirectory (Get-Location | Select-Object -ExpandProperty Path)
Remove-Item $tempbat_path
}
<が使えないためUnix、Linuxでは/bin/shから<を使えるシェルを呼び出し、
Windowsではcmdを呼び出して、<を使っている。
疑問点
- Convertto-Json -comprexでjsonを一行の文字列にしたら<を使わなくて住むのでは?
-> github cliがそれだと正しく環境変数を設定できなかった。github cli側の問題なのか、pwsh側の問題なのかわからんけど、多分pwsh側の問題の気がする。
- もっと簡単にできないの?
pwshにこれに関係する機能が追加されるまで多分無理。
Discussion