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.

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.