Focus on CLIs
The new Windows Terminal has been an invaluable tool as I have been focusing on developing my CLI skills recently. For me, this has included:
As a .NET developer, Windows is my ideal platform due to first-class tooling (Visual Studio). That could be changing; but, for now, Windows makes sense as a primary environment.
Despite using Windows, I began learning CLIs when I first started managing Ubuntu instances for hosting various applications. When trying to navigate around my Windows file system, I often struggle remembering to type dir
instead of ls
(for listing files), ;
instead of &&
(for chaining operations), etc.
For this reason, I like to reach for *nix-ish solutions on Windows.
Terminals, Emulators, and Shells
Let us define some terms.
Terminal
Technically, a terminal was a physical device (think text-only monitor) that collects input and displays output on an early computer.
Terminal Emulator
A terminal emulator is a software application that runs inside a GUI environment emulating an old terminal. We typically refer to these as terminals or consoles today.
Examples:
Shell
A shell is a text-based program that we execute from a terminal emulator. On Windows, these applications seem to be called “command interpreters”, but they are analogous in concept to a *nix shell.
Examples:
The New Windows Terminal
For the past year or two, I have used Cmder with its default ConEmu emulator. It provides a virtual *nix abstraction on top of the Windows API. It is a solid tool, but I have experienced it to be a bit sluggish at times.
When the first preview of the new Windows Terminal launched, I played with it a bit and I was impressed by its design and performance. Over the last couple of weeks, I have done some more research and configuration and have fallen in love with this new app.
Installation
choco install microsoft-windows-terminal
Configuration
Microsoft is working on a settings UI for Windows Terminal; but, for now, the settings are all configured in JSON. Here is a gist sample of my current configuration. In essence, the settings file just tells the app where to look for the shell executable and what fonts to use (I am enjoying Fira these days).
My Current Shells
- MinGW-w64 – Git for Windows automatically installs MinGW. It provides that *nix-ish abstraction on Windows that I enjoy so much. I use this shell regularly for git and other development CLIs.
- Ubuntu-18.04 – The current release of Windows 10 has version 1 of the Windows Subsystem for Linux. I currently use this Ubuntu instance exclusively as an Ansible control node for updating my web servers. I would like to shift to using it more frequently, and I am looking forward to WSL 2, specifically for its improvements to Docker Desktop.
- Powershell – I do not know Powershell. I have to touch it once in a blue moon, and when I do, it is mostly copy/paste from StackOverflow.
- cmd – I rarely use cmd anymore. I prefer the *nix-ish syntax for navigating around Windows. But, it is nice to keep handy for the sentimental value.
Next Steps
In the future, I look forward to…
- replacing PUTTY (for server SSH access) with Windows Terminal and Windows 10’s native OpenSSH support.
- using native Linux on Windows via WSL 2 more frequently.
- exploring other shell options.
- using Powerline for enhanced readability and cool factor.
Leave a Reply