Skip to content

PsBash

Real bash commands. Real PowerShell objects.

Muscle Memory

Same ls -la, grep -r, ps aux commands you already know. Same flags, same output format. No new syntax to learn.

Typed Pipeline

Objects survive through grep, sort, head, tail. Pipe ls -la | grep '.ps1' and get LsEntry objects back, not strings to parse.

Cross-Platform

Windows, Linux, macOS. No WSL overhead, no VM, no filesystem boundary. Runs everywhere PowerShell runs.

Bash-style commands that return real objects:

Terminal window
PS> ls -la | grep '.ps1' | sort -k5 -h
-rw-r--r-- 1 beagle wheel 141234 Apr 2 09:46 PsBash.psm1
-rw-r--r-- 1 beagle wheel 4521 Apr 2 00:57 PsBash.psd1
PS> $files = ls -la | grep '.ps1' | sort -k5 -h
PS> $files.Name
PsBash.psm1
PsBash.psd1
PS> $files[0].SizeBytes
141234

The output looks like bash. The pipeline carries typed objects. You get both.

TaskBashPsBashNative PowerShell
List files with detailsls -lals -laGet-ChildItem | Format-List
Find text in filesgrep -r 'TODO' .grep -r 'TODO' .Select-String -Pattern 'TODO' -Path . -Recurse
Sort by columnsort -k5 -hsort -k5 -hSort-Object { $_.Length }
First 10 lineshead -n 10 file.txthead -n 10 file.txtGet-Content file.txt -Head 10
Count lineswc -l *.ps1wc -l *.ps1(Get-Content *.ps1 | Measure-Object -Line).Lines

Same command. Typed objects. No string parsing.

PsBash also ships a standalone interactive shell: type bash, run it on a warm PowerShell runspace, and get the line-editing, history, and completion experience a bash user expects — on every platform.

Fuzzy Ctrl-R

A full-screen, ranked history search — closer to fzf/atuin than bash. Boosts commands run in this directory, recently, and often. History search →

Smart cd: z & zi

Zoxide-style jumping, built in. z core lands on the directory you most likely mean, ranked by frecency. Directory jumping →

Real completion

Bash flags and PowerShell cmdlet parameters, ValidateSet values, and a floating flag-doc panel with an F1 man-page browser. Completion →

!! and aliases

!!, !$, ^old^new bang-history in PowerShell, plus full-syntax bash alias (pipes and all). Bang history →

Pipe a bash command’s typed output into Format-Styled and theme your terminal with real CSS — selectors, classes, colors, alignment. Or open it as an interactive, navigable TUI.

Terminal window
ps aux | Format-Styled -Style ps # CSS-themed process table
ping example.com | Show-Styled # full-screen, auto-themed by latency
ls -la | browse # arrow-key file workbench, with actions

CSS-styled output

Ten built-in stylesheets, custom themes from ~/.config/ps-bash/styles/, NO_COLOR-aware. Styled output →

Interactive TUIs from a .psm1

Build a navigable workbench by writing a PowerShell module — adapters and actions, no C#, no TUI framework. Interactive TUIs →

68 Commands

ls, grep, awk, jq, sed, find, tar, and 61 more Unix commands reimplemented as native PowerShell cmdlets.

775 Tests

Every command tested across flag combinations, edge cases, and pipeline scenarios.

3 Platforms

Windows, Linux, macOS. CI-verified on all three.

20 Typed Objects

LsEntry, GrepMatch, PsEntry, WcResult and more. Real properties, not text.