Nushell
Get Nu!
Getting Started
  • The Nushell Book
  • Command Reference
  • Cookbook
  • Language Reference Guide
  • Contributing Guide
Blog
  • English
  • 中文
  • Deutsch
  • Français
  • Español
  • 日本語
  • Português do Brasil
  • Русский язык
GitHub
Get Nu!
Getting Started
  • The Nushell Book
  • Command Reference
  • Cookbook
  • Language Reference Guide
  • Contributing Guide
Blog
  • English
  • 中文
  • Deutsch
  • Français
  • Español
  • 日本語
  • Português do Brasil
  • Русский язык
GitHub
  • Introduction
  • Installation
    • Default Shell
  • Getting Started
    • Quick Tour
    • Moving Around the System
    • Thinking in Nu
    • Nushell Cheat Sheet
  • Nu Fundamentals
    • Types of Data
    • Loading Data
    • Pipelines
    • Working with Strings
    • Working with Lists
    • Working with Records
    • Working with Tables
    • Navigating and Accessing Structured Data
    • Special Variables
  • Programming in Nu
    • Custom Commands
    • Aliases
    • Operators
    • Variables
    • Control Flow
    • Scripts
    • Modules
      • Using Modules
      • Creating Modules
    • Overlays
    • Sorting
    • Testing your Nushell Code
    • Best Practices
  • Nu as a Shell
    • Configuration
    • Environment
    • Stdout, Stderr, and Exit Codes
    • Running System (External) Commands
    • How to Configure 3rd Party Prompts
    • Directory Stack
    • Reedline, Nu's Line Editor
    • Custom Completions
    • Externs
    • Coloring and Theming in Nu
    • Hooks
    • Background Jobs
  • Coming to Nu
    • Coming from Bash
    • Coming from CMD.EXE
    • Nu map from other shells and domain specific languages
    • Nu Map from Imperative Languages
    • Nu Map from Functional Languages
    • Nushell operator map
  • Design Notes
    • How Nushell Code Gets Run
  • (Not So) Advanced
    • Standard Library (Preview)
    • Dataframes
    • Metadata
    • Creating Your Own Errors
    • Parallelism
    • Plugins
    • explore

Coming from Bash

Tips

If you're coming from Git Bash on Windows, then the external commands you're used to (e.g, ln, grep, vi, etc) will not be available in Nushell by default unless you have already explicitly made them available in the Windows Path environment variable. To make these commands available in Nushell as well, add the following line to your config.nu with either append or prepend.

$env.Path = ($env.Path | prepend 'C:\Program Files\Git\usr\bin')

Command Equivalents:

BashNuTask
lslsLists the files in the current directory
ls <dir>ls <dir>Lists the files in the given directory
ls pattern*ls pattern*Lists files that match a given pattern
ls -lals --long --all or ls -laList files with all available information, including hidden files
ls -d */ls | where type == dirList directories
find . -name *.rsls **/*.rsFind recursively all files that match a given pattern
find . -name Makefile | xargs vimls **/Makefile | get name | vim ...$inPass values as command parameters
cd <directory>cd <directory>Change to the given directory
cdcdChange to the home directory
cd -cd -Change to the previous directory
mkdir <path>mkdir <path>Creates the given path
mkdir -p <path>mkdir <path>Creates the given path, creating parents as necessary
touch test.txttouch test.txtCreate a file
> <path>out> <path> or o> <path>Save command output to a file
| save <path>Save command output to a file as structured data
>> <path>out>> <path> or o>> <path>Append command output to a file
| save --append <path>Append command output to a file as structured data
> /dev/null| ignoreDiscard command output
> /dev/null 2>&1out+err>| ignore or o+e>| ignoreDiscard command output, including stderr
command 2>&1 | lesscommand out+err>| less or command o+e>| lessPipe stdout and stderr of an external command into less (NOTE: use explore for paging output of internal commands)
cmd1 | tee log.txt | cmd2cmd1 | tee { save log.txt } | cmd2Tee command output to a log file
command | head -5command | first 5Limit the output to the first 5 rows of an internal command (see also last and skip)
cat <path>open --raw <path>Display the contents of the given file
open <path>Read a file as structured data
mv <source> <dest>mv <source> <dest>Move file to new location
for f in *.md; do echo $f; donels *.md | each { $in.name }Iterate over a list and return results
for i in $(seq 1 10); do echo $i; donefor i in 1..10 { print $i }Iterate over a list and run a command on results
cp <source> <dest>cp <source> <dest>Copy file to new location
cp -r <source> <dest>cp -r <source> <dest>Copy directory to a new location, recursively
rm <path>rm <path>Remove the given file
rm -t <path>Move the given file to the system trash
rm -rf <path>rm -r <path>Recursively removes the given path
date -d <date>"<date>" | into datetime -f <format>Parse a date (format documentation)
sedstr replaceFind and replace a pattern in a string
grep <pattern>where $it =~ <substring> or find <substring>Filter strings that contain the substring
man <command>help <command>Get the help for a given command
help commandsList all available commands
help --find <string>Search for match in all available commands
command1 && command2command1; command2Run a command, and if it's successful run a second
stat $(which git)stat ...(which git).pathUse command output as argument for other command
echo /tmp/$RANDOM$"/tmp/(random int)"Use command output in a string
cargo b --jobs=$(nproc)cargo b $"--jobs=(sys cpu | length)"Use command output in an option
echo $PATH$env.PATH (Non-Windows) or $env.Path (Windows)See the current path
echo $?$env.LAST_EXIT_CODESee the exit status of the last executed command
<update ~/.bashrc>vim $nu.config-pathUpdate PATH permanently
export PATH = $PATH:/usr/other/bin$env.PATH = ($env.PATH | append /usr/other/bin)Update PATH temporarily
export$envList the current environment variables
<update ~/.bashrc>vim $nu.config-pathUpdate environment variables permanently
FOO=BAR ./binFOO=BAR ./binUpdate environment temporarily
export FOO=BAR$env.FOO = BARSet environment variable for current session
echo $FOO$env.FOOUse environment variables
echo ${FOO:-fallback}$env.FOO? | default "ABC"Use a fallback in place of an unset variable
unset FOOhide-env FOOUnset environment variable for current session
alias s="git status -sb"alias s = git status -sbDefine an alias temporarily
type FOOwhich FOODisplay information about a command (builtin, alias, or executable)
<update ~/.bashrc>vim $nu.config-pathAdd and edit alias permanently (for new shells)
bash -c <commands>nu -c <commands>Run a pipeline of commands
bash <script file>nu <script file>Run a script file
\( <command> )A command can span multiple lines when wrapped with ( and )
pwd or echo $PWDpwd or $env.PWDDisplay the current directory
read varlet var = inputGet input from the user
read -s secretlet secret = input -sGet a secret value from the user without printing keystrokes

History Substitutions and Default Keybindings:

BashNuTask
!!!!Insert last command-line from history
!$!$Insert last spatially separated token from history
!<n> (e.g., !5)!<n>Insert <n>th command from the beginning of the history
Tip: history | enumerate | last 10 to show recent positions
!<-n> (e.g., !-5)!<-n>Insert <n>th command from the end of the history
!<string> (e.g., !ls)!<string>Insert the most recent history item that begins with the string
Ctrl/Cmd+RCtrl/Cmd+RReverse history search
(Emacs Mode) Ctrl+XCtrl+ECtrl/Cmd+OEdit the command-line in the editor defined by $env.EDITOR
(Vi Command Mode) VCtrl/Cmd+OEdit the command-line in the editor defined by $env.EDITOR

Most common Emacs-mode and Vi-mode keybindings are also available. See the Reedline Chapter.

Tips

In Bash, history substitution occurs immediately after pressing Enter to execute the command-line. Nushell, however, inserts the substitution into the command-line after pressing Enter. This allows you to confirm the substitution and, if needed, make additional edits before execution.

This behavior extends to "Edit command-line in Editor" as well. While Bash immediately executes the command after exiting the editor, Nushell (like other, more modern shells such as Fish and Zsh) inserts the editor contents into the command-line, allowing you to review and make changes before committing it to execution.

Edit this page on GitHub
Contributors: Carson Black, Ibraheem Ahmed, Jonathan Turner, ammkrn, JT, Hristo Filaretov, Tw, Arnout Engelen, jntrnr, fdncred, Justin Ma, Herlon Aguiar, chtenb, Kyle J Strand, Carson Riker, Homa Wong, Christopher Durham, Kayla Washburn, 1submarine, Zhora Trush, Alex Saveau, Leon, debemdeboas, Aidan Gauland, Tomas Zemanovic, amtoine, Lucas Kent, Motalleb Fallahnezhad, c4lliope, Vladimir Budylnikov, Ian Manske, NotTheDr01ds, Hofer-Julian, paulie4, Kieron Wilkinson, 0x4D5352, Roland Marchand, Jan Klass, tkr-sh
Next
Coming from CMD.EXE