top of page
book of spells.webp

Start your journey towards mastering the CLI with our FREE Command Line Book of Spells.

By entering your email address you agree to receive emails from Command Line Wizardry. We'll respect your privacy and you can unsubscribe at any time.

  • Writer's picturePaul Troncone

Creating Hybrid Scripts - Leveraging the Power of Multiple Shells

You may think of command line scripts as using one specific shell or language, but depending on your environment you can combine multiple shells in a single script to leverage the advantages of each.

Hybrid bash script in Windows

If you are running Windows and have Git for Windows installed you can use the included bash shell to execute a script that integrates bash, Windows commands, and PowerShell. Here is an example:

printf 'This is bash running on Windows\n'

powershell write-host "This is PowerShell"

tasklist   	         #This is a Windows command

tasklist | cut -c1-25	 #Windows command piped into a Linux command

Here is sample output when run from Git bash:

$ ./

This is bash running on Windows
This is PowerShell

Image Name                     PID Session Name        Session#
========================= ======== ================ =========== 
System Idle Process              0 Services                   0

Hybrid batch script in Windows

This same method can be used when writing a Windows batch script. The Windows Subsystem for Linux (WSL) and PowerShell can easily be accessed and integrated if installed:

echo This is a Windows command

powershell write-host "This is PowerShell"

wsl cowsay 'This is a Linux command using the Windows Subsystem for Linux'


Here is the output when executed from the Windows command prompt:


This is a Windows command
This is PowerShell
/ This is a Linux command using the \
\ Windows Subsystem for Linux       /
        \   ^__^
         \  (oo)\_______
            (__)\       )\/\
                ||----w |
                ||     ||

Hybrid PowerShell script in Windows

From a Windows PowerShell script you can easily access Windows commands and Linux commands if WSL is installed:

write-host "This is PowerShell"
wsl cowsay This is Linux

echo "This is a Windows command"


And the output when run from PowerShell:

PS C:\> .\Hybrid.ps1

This is PowerShell 

< This is Linux >
        \   ^__^
         \  (oo)\_______
            (__)\       )\/\
                ||----w |
                ||     ||

This is a Windows command

Hybrid bash script in Linux

Finally, you can call PowerShell from a bash script in Linux if you have it installed:

printf 'This is a Linux command\n'

pwsh -command write-host "This is PowerShell on Linux"

And the output when executed from Linux:

$ ./

This is a Linux command
This is PowerShell on Linux


Creating hybrid scripts is a great way to leverage the strengths of different shells. However, be aware that performance may be an issue. Every time you call a shell that is different than the one the script is natively executing in, it will create a new instance. For example, if you are executing a Windows batch script and call a Linux command using WSL it will create a temporary Linux shell to execute the command. Constantly creating and destroying shells from within a script will negatively impact performance, so avoid using this method in loops or where speed is essential.


The table below summarizes what shells your scripts have access to from a given execution environment. For example, you can access Linux, Windows, and PowerShell commands when executing a bash script on Windows using Git bash.

Links and Resources

754 views0 comments


bottom of page