はじめに
この記事では、PowerShellで < NUL を含むコマンドを実行したときに、「演算子 '<' は予約されています」と出る場合の対処法をまとめます。
環境
| 項目 | 内容 |
|---|---|
| OS | Windows |
| シェル | PowerShell |
| ツール | blogsync |
| 実行場所 | PowerShell |
| エラー文 | 演算子 '<' は予約されています / The '<' operator is reserved for future use. |
| 実行したコマンド | < NUL を含むcmd向けコマンド |
確認状況
このエラーは、過去のblogsync運用メモに遭遇記録があり、今回の検証でも再現できました。
確認コマンド:
echo test < NUL
今回の環境では、英語で次のメッセージが出ました。
The '<' operator is reserved for future use.
結論
PowerShellでは、cmd向けの < NUL をそのまま使わない方が安全です。
PowerShellでは、パイプで入力を渡します。
echo "記事タイトル" | blogsync post --draft <BLOG_DOMAIN>
英語環境では、次のように表示されることもあります。
The '<' operator is reserved for future use.
原因
Windowsには、cmdとPowerShellがあります。
見た目はどちらも黒いターミナルに見えますが、構文が違います。
cmd向けの例をPowerShellにそのまま貼ると、記号の解釈が変わってエラーになることがあります。
確認すること
エラーが出たら、まずそのコマンド例がどのシェル向けか確認します。
cmd向けなのか PowerShell向けなのか Git Bash向けなのか WSL向けなのか
特に <、>、&、|、引用符まわりはシェルによって挙動が変わります。
blogsyncでの記事作成例
PowerShellでは、次の形が扱いやすいです。
echo "新しい記事" | blogsync post --draft <BLOG_DOMAIN>
タイトルを標準入力で渡して、下書き記事を作成します。
まとめ
PowerShellで < まわりのエラーが出たら、ツールの不具合ではなく、シェル構文の違いを疑います。
cmd向けの例を使っている場合は、PowerShell向けの書き方に置き換えるのが安全です。