SHELL(1)		    General Commands Manual		      SHELL(1)

NAME
     shell - Creates a temporary interactive shell session in a disposable
     working directory

SYNOPSIS
     shell [-fq] [-d directory] [shell [...]]
     shell [-fkqS] [-s directory] [shell [...]]
     shell -v

DESCRIPTION
     The shell utility creates an interactive shell session with a clean
     environment and with an empty working directory.

     By specifying a specific shell on the command line, a shell other than
     the user's login shell may be invoked.  If a specific shell is not
     requested, the SHELL environment variable will be used to infer what
     shell to start.

     The basename of the named shell must correspond to a valid login shell
     and the actual shell that is started will always be taken from the list
     of valid login shells (by matching the basename of the specified shell,
     or $SHELL, against the basenames of the allowed login shells).  This
     behaviour may be bypassed by using the -f command line option.

     Any operands present after the name of the shell will be passed as is to
     the shell in question.

     If shell (this utility, not the interactive shell process) receives the
     USR1 signal, the temporary working directory will not be deleted when the
     shell session terminates (as if -k had been used from the start).

     The options are as follows:

     -d directory
	     Use the specified directory rather than a new temporary
	     directory.	 This directory will not be deleted when the shell
	     session terminates.  This option implies the -k option, and
	     overrides any earlier -s option.

     -f	     Force the execution of the given command, even if it is not a
	     valid login shell on the current system.  The command needs to be
	     specified with an absolute path.

     -k	     Keep the temporary directory around after terminating the shell
	     session.

     -q	     Be quiet.	Don't output informational messages.

     -s directory
	     Pre-populate the temporary directory with the contents of the
	     named "skeleton directory".  This will copy the whole directory
	     structure rooted in the specified directory to the temporary
	     working directory.	 This option overrides any earlier -d option.

     -S	     Do not pre-populate the temporary directory with the contents of
	     a "skeleton directory", even if the -s option was used earlier on
	     the command line or the SHELL_SKEL environment variable is set.

     -v	     Output version information and immediately terminate.

ENVIRONMENT
     shell uses the following environment variables:

     SHELL   Used to determine what shell to start if a specific shell is not
	     specified on the command line.  If this variable is unset or
	     empty, then /bin/sh will be used instead.

     SHELL_SKEL
	     Directory to automatically pre-populate the temporary working
	     directory with.  This environment variable is not used if any of
	     the -d or -s options are used on the command line.

     TMPDIR  Directory in which to create the working directory when the -d
	     option is not used.  This variable is used by mktemp which will
	     revert to use /tmp if the variable is not set.

     shell clears the environment of the interactive shell that it starts, but
     also sets the following environment variables:

     HOME    Set to the working directory where the shell is started.

     PATH    Set to the output of "getconf PATH".

     PS1     Set to the string `$ ' (dollar-sign and space).  Note that some
	     shells ignore this variable if passed from the parent
	     environment.

     SHELL   Set to the absolute path of the real shell executable.  This may
	     be different from the shell mentioned on the command line as the
	     actual shell used will be picked from the list of valid login
	     shells (unless -f is used).

     TERM    Carried over from the parent environment.

FILES
     /etc/shells
	     Used as a source for valid login shells on systems where "getent
	     shells" does not work.

EXAMPLES
     Start a new shell in a new temporary directory:

	   $ shell
	   shell: info: Starting /bin/ksh in /tmp/shell-ksh.mJMHFTFE
	   $ exit
	   shell: info: Removing /tmp/shell-ksh.mJMHFTFE

     Start a new dash shell in a temporary directory:

	   $ shell dash
	   shell: info: Starting /usr/local/bin/dash in /tmp/shell-dash.V7zU6EtZ
	   $ exit
	   shell: info: Removing /tmp/shell-dash.V7zU6EtZ

     Start a new bash shell in a specific directory:

	   $ shell -d "$HOME/testing" bash
	   shell: info: Starting /usr/local/bin/bash in /home/myself/testing
	   $ exit
	   exit
	   shell: info: Leaving /home/myself/testing in place

     Start ksh as a login shell and pre-populate the temporary directory with
     the contents of $HOME/skel.  Note, starting the ksh shell as a login
     shell will in this case make it execute the .profile file copied from
     $HOME/skel.

	   $ shell -s "$HOME/skel" ksh -l
	   shell: info: Copying /home/myself/skel into /tmp/shell-ksh.ngEwbcpD
	   shell: info: Starting /bin/ksh in /tmp/shell-ksh.ngEwbcpD
	   $ ls -la
	   total 36
	   drwxr-xr-x	2 myself  wheel	 512 Apr 15 12:55 .
	   drwxrwxrwt  28 root	  wheel	 512 Apr 21 14:15 ..
	   -rw-r--r--	1 myself  wheel	  87 Nov  1 19:14 .Xdefaults
	   -rw-r--r--	1 myself  wheel	 771 Feb  9 10:18 .cshrc
	   -rw-r--r--	1 myself  wheel	 101 Nov  1 19:14 .cvsrc
	   -rw-r--r--	1 myself  wheel	 359 Nov  1 19:14 .login
	   -rw-r--r--	1 myself  wheel	 175 Nov  1 19:14 .mailrc
	   -rw-r--r--	1 myself  wheel	 215 Feb  9 10:18 .profile
	   -rw-r--r--	1 myself  wheel	 108 Apr 15 12:50 .vimrc
	   $ exit
	   shell: info: Removing /tmp/shell-ksh.ngEwbcpD

     Start a POSIX-ly correct yash shell as another user.

	   $ su testuser -c 'shell yash --posixly-correct'
	   Password:
	   shell: info: Starting /usr/local/bin/yash in /tmp/shell-yash.yrSSGISG
	   $ id
	   uid=1001(testuser) gid=1001(testuser) groups=1001(testuser)
	   $ exit
	   shell: info: Removing /tmp/shell-yash.yrSSGISG

SEE ALSO
     mktemp(1)

AUTHORS
     Andreas Kusalananda Kahari <andreas.kahari@abc.se>

CAVEATS
     For Solaris, the list of valid login shells is taken from the "shells(4)"
     manual on a vanilla Solaris 11.4 system.  This is because Solaris lacks
     "getent shells" and may also lack the /etc/shells file.  The /etc/shells
     file will still be used if it exists.

Unix				 May 28, 2019				  Unix
