UNPKG

arch-wiki-md-repo

Version:

All arch-wiki articles in markdown format, updated every two days.

119 lines (78 loc) 3.6 kB
[Nash](https://github.com/NeowayLabs/nash) (or Nash shell) is a minimalist yet powerful [shell](/index.php/Shell "Shell") with focus on readability and security of scripts. It is inspired by Plan9 [rc](https://en.wikipedia.org/wiki/rc "wikipedia:rc") shell and brings to Linux a similar approach to [namespaces(7)](https://jlk.fjfi.cvut.cz/arch/manpages/man/namespaces.7) creation. There is a *nashfmt* program to correctly format nash scripts in a readable manner, much like the Golang [gofmt](https://golang.org/cmd/gofmt/) program. ## Contents * [1 Installation](#Installation) * [2 Configuration](#Configuration) * [2.1 Organizing the init](#Organizing_the_init) * [2.2 Configuring $PATH](#Configuring_.24PATH) * [2.3 Making nash your default shell](#Making_nash_your_default_shell) * [3 Usage](#Usage) * [3.1 Keybindings](#Keybindings) * [4 See also](#See_also) ## Installation [Install](/index.php/Install "Install") the [nash-git](https://aur.archlinux.org/packages/nash-git/) package. ## Configuration 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` ``` /home/*username*/.nash ``` 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 } chdir($path) 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 (/usr/local)λ> ``` For a more elaborated *cd* or other aliases implementation, see the project [dotnash](https://github.com/tiago4orion/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](https://github.com/tiago4orion/dotnash/blob/master/init). ### Configuring $PATH Inside the *init* put the code below (edit for your needs): ``` path = ( "/bin" "/usr/bin" "/usr/local/bin" $HOME+"/bin" ) PATH = "" for p in $path { PATH = $PATH+":"+$p } setenv PATH ``` ### Making nash your default shell See [Command-line shell#Changing your default shell](/index.php/Command-line_shell#Changing_your_default_shell "Command-line shell"). ## Usage ### Keybindings 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 * [Nash shell](https://github.com/NeowayLabs/nash) * [dotnash](https://github.com/tiago4orion/dotnash) * [Autocomplete for nash shell](https://github.com/NeowayLabs/nashcomplete)