From ArchWiki
Jump to: navigation, search

Nash (or Nash shell) is a minimalist yet powerful shell with focus on readability and security of scripts. It is inspired by Plan9 rc shell and brings to Linux a similar approach to namespaces(7) creation. There is a nashfmt program to correctly format nash scripts in a readable manner, much like the Golang gofmt program.


Install the nash-gitAUR package.


Make sure that nash has been successfully installed issuing the command below in your current shell:

$ nash

If it returned a lambda prompt, then everything is fine.

When first executed, nash will create a ~/.nash/ directory in the user's homepath. Enter the command below to discover by yourself what is this directory:

λ> echo $NASHPATH

Put a file called init inside this directory to configure it.

Nash only has 1 special variables:

  • PROMPT variable stores the unicode string used for the shell prompt.

Nash default cd is a very simple alias to the builtin function chdir; you may find it odd to use. To improve your usage you can create your own cd alias. In nash you cannot create aliases by matching string to strings, but only binding function to command names. The init below creates a cd alias as example:

defPROMPT = "λ> "

fn cd(path) {
        if $path == "" {
                path = $HOME

        PROMPT = "("+$path+")"+$defPROMPT
        setenv PROMPT

# bind the "cd" function to "cd" command name
bindfn cd cd

After saving the init file, simply start a new shell and now you can use cd as if it were a builtin keyword.

git:(master)λ> nash
λ> cd
(/home/i4k)λ> cd /usr/local

For a more elaborated cd or other aliases implementation, see the project dotnash.

Organizing the init

Nash scripts can be modular, but there is no concept of package. You can use the import keyword to load other files inside the current script session. For an example, see dotnash init.

Configuring $PATH

Inside the init put the code below (edit for your needs):

path = (

PATH = ""

for p in $path {
        PATH = $PATH+":"+$p

setenv PATH

Making nash your default shell

See Command-line shell#Changing your default shell.



The cli supports emacs and vi modes for common buffer editing. Default mode is emacs and you can change issuing:

λ> set mode vi

See also