• 作成:

PowerShellで改行せずにファイルに追記する方法

前提

GitHub ActionsでWindowsのPowerShellを使う必要がありました。まあWindows向けのrunでもbashを指定できるみたいなんですが、せっかくあんまりCIで触らないWindowsなのでネイティブシェルであるPowerShellを使ってPowerShellに親しみたいという意図がありました。

やりたいこと

ファイルに改行せず文字列を追記したい。

Linuxならば

echo -n "foo" >> bar.txt

のようにecho -nを使うだけです。

問題

PowerShellのechoはWrite-Outputのエイリアスです。これに改行しないというオプションは無いようです。

Write-Hostというコマンドレットもあり、これは-NoNewlineオプションを持っているようですが、 Write-Hostはコンソールに直接書き込むことしか出来なくて、リダイレクトは出来ません。

解決

PowerShellでのOut-Fileコマンドの使い方|各オプションもご紹介 | テックマガジン from FEnetインフラを見て解決しました。

Out-Fileコマンドレットには-NoNewlineオプションが存在するので、

Write-Output "foo"|Out-File -NoNewline -Append .\foo.txt

のように、一度リダイレクトでOut-Fileに渡してやって、 -NoNewlineを使えば良いようです。

余談

今回の場合最終的にgithub-scriptでファイルから文字列を集計しているので、 JavaScriptの方でtrimした方が楽だったのではと気がついてしまいました。テキストファイルなのに改行がないというのも変な話ですし。