👻

pwshの<を使ったファイルからの入力の受け取り

2022/05/01に公開

結論からいうとできません。

下記のように書いてください。


# 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を呼び出して、<を使っている。

疑問点

  1. Convertto-Json -comprexでjsonを一行の文字列にしたら<を使わなくて住むのでは?

-> github cliがそれだと正しく環境変数を設定できなかった。github cli側の問題なのか、pwsh側の問題なのかわからんけど、多分pwsh側の問題の気がする。

  1. もっと簡単にできないの?

pwshにこれに関係する機能が追加されるまで多分無理。

Discussion