nash - script interpretor to interpret linuxrc images
nash [--quiet] [--force] script
nash is a very simple script interpretor designed to be as small as possible. It is pri-
marily designed to run simple linuxrc scripts on an initrd image. Arguments to commands
may be enclosed in either single or double quotes to allow spaces to be included in the
arguments. Spaces outside of quotations always delineate arguments, and so backslash
escaping is supported.
Additionally, if nash is invoked as modprobe, it will immediately exit with a return code
of zero. This is to allow initrd's to prevent some extraneous kernel error messages during
There are two types of commands, built in and external. External commands are run from the
filesystem via execve(). If commands names are given without a path, nash will search it's
builtin PATH, which is /usr/bin, /bin, /sbin, /usr/sbin.
Currently, nash supports the following built in commands.
access -[r][w][x][f] path
Tells whether the current user has sufficient permissions to read, write, or exec-
ture path, or if the file exists (see access(2) for more information).
echo [item]* [> filename]
Echos the text strings given to a file, with a space in between each item. The out-
put may be optionally redirected to a file.
exec <command> The command given is execed, overlaying the nash process.
find dir -name name
Display the path to files named name in or below directory dir. This is a very
limited implementation of find(1).
Prints the full path to the first unused loopback block device on the system. If
none is available, no output is displayed.
losetup /dev/loopdev file
Binds file to the loopback device /dev/loopdev. See losetup(8) for information on
Creates device files for all of the block devices listed in /proc/partitions in the
directory specfied by path.
mkdir [-p] path
Creates the directory path. If -p is specified, this command will not complain if
the directory exists. Note this is a subset of the standard mkdir -p behavior.
mknod path [c|b] major minor
Creates a device inode for path. This is identical to mkdev(1) which the exceptions
that it will not create named pipes and if the directories in path do not exist
they will be automatically created.
Makes path a block inode for the device which should be mounted as root. To deter-
mine this device nash uses the device suggested by the root= kernel command line
argument (if root=LABEL is used devices are probed to find one with that label). If
no root= argument is available, /proc/sys/kernel/real-root-dev provides the device
mount [--ro] -o opts -t type device mntpoint
Mounts a filesystem. It does not support NFS, and it must be used in the form given
above (arguments must go first). If device is of the form LABEL=foo the devices
listed in /fB/proc/partitions will be searched, and the first device with a volume
label of foo will be mounted. Normal mount(2) options are supported, and --ro will
mount the filesystem read only for compatibility with older versions of nash. The
defaults mount option is silently ignored.
pivot_root newrootpath oldrootpath
Makes the filesystem mounted at newrootpath the new root filesystem, and mounts the
current root filesystem as oldrootpath.
Runs raid autodetection on all raid-typed partitions. mddevice must be a raid
device (any will do).
Display a table of devices, their filesystem labels, and their uuids.
Unmounts the filesystem mounted at path.
Returns 0 is the last command succeeded or 1 if it failed.
Allows force really execute the script, even though nash doesn't appear to be run-
ning from an initrd image.
Probably many. nash is not a shell, and it shouldn't be thought of as one. It isn't
entirely different from a shell, but that's mostly by accident.
Erik Troan <firstname.lastname@example.org>
4th Berkeley Distribution Sat Mar 27 1999 NASH(8)