Dance with Agents

WindowsとMacで、ターミナルはここが違う

ネット上の解説は、MacやLinuxを前提に書かれているものが多くあります。Windowsで同じことをやろうとすると、同じに見えて動きが違うところがいくつかあります。知っておくと無駄に悩まずに済みます。

(ターミナルの開き方そのものはWindowsでターミナルを開くにあります。)

Ctrl+Cは、コピーと中断を自動で使い分けている

これがいちばんの驚きポイントです。

ターミナルの世界では伝統的に、Ctrl+Cは「今動いているものを止める」合図です。暴走した処理を止める非常ボタンとして使います。一方、Windowsの一般的なアプリではCtrl+Cは「コピー」です。

この2つがぶつかります。 Windows Terminalはこれを、こう解決しています。

文字を選択していれば → コピー

何も選択していなければ → 中断の合図としてそのまま送る

Windows ターミナルのアクション(Microsoft公式)の「コピー」の項に、はっきり書かれている仕様です——「選択したターミナル コンテンツがクリップボードにコピーされます。何も選択されなかった場合は、キー コードが端末に直接送信されます」。つまり、普段どおりの感覚で使って大丈夫なのですが、この動きを知らないと「止めたいのに止まらない」という場面で混乱します。止めたいときは、まず選択を解除してください。 そのうえでCtrl+Cです。

なおCtrl+Shift+C(コピー)とCtrl+Shift+V(貼り付け)も使えますし、マウスの右クリックでもコピペできます。 迷ったら右クリックが安全です。

UNIXコマンドは、意外と通じる

lsやcdはUNIX系の世界のコマンドなので、Windowsでは通じないと思われがちです。が、PowerShellでは通じます。

打つと動くもの 実際に呼ばれているもの
cd Set-Location
ls Get-ChildItem
pwd Get-Location
cat Get-Content
cp / mv / rm Copy-Item / Move-Item / Remove-Item
clear Clear-Host

PowerShellが別名(エイリアス)を用意してくれているので、UNIX系の名前でも呼べる、という仕組みです。

ただし、オプションは通じない

ここが落とし穴です。名前が同じでも、中身は別のコマンドなので、-で始まるオプションの書き方が違います。

ls -la        ← Macでは動く。Windowsではエラーになる

「コマンド名は通じるが、オプションは通じない」と覚えておいてください。詳しい指定をしたくなったら、素直にPowerShell側の書き方を調べるほうが早いです。エージェントに「これのWindows版は?」と聞けば教えてくれます。

逆に、無いもの

grepやtouch、head、tailといったあたりは、別名が用意されていません。Windowsではそのままでは打てません。

エージェントを使っていると、こういう場面ではエージェント自身がWindows向けの書き方に直してくれることが多いので、あまり身構えなくても大丈夫です。

注意:これは「Windows版のPowerShell」の話

紛らわしいのですが、PowerShellはMacやLinuxにもインストールできます。 そして、そちらではlsの別名は用意されていません(本物のlsが動いてほしいので、あえて外してあります)。

「PowerShellだからlsが動く」のではなく、「WindowsのPowerShellだから動く」というのが正確なところです。

覚えておきたいこと

  • 止めたいときのCtrl+Cは、選択を解除してから
  • コマンド名は通じても、オプションは通じない
  • 困ったらエージェントに「Windowsだとどう書くの?」と聞く — これがいちばん早い

最後のものが、実はこのサイトの結論そのものです。環境ごとの細かい違いを全部覚える必要は、もうありません。

ターミナル / UNIXコマンドの記事

ターミナル / UNIXコマンドのページへ →