7

I need to get rid of all the environment variables in a Ksh shell. I can fork a new instance, but it will inevitably source some init files (as far as I know .profile, .kshrc). Is there a way to bypass the sourcing of those files and any other file that might be read at init time?

  • Ksh version: Version M-11/16/88i
  • OS: Solaris 10

Hope I'm clear enough.

rahmu
  • 20,023

2 Answers2

7

~/.profile is only read by login shells. ~/.kshrc is only executed for interactive shells.

Solaris's env supports the syntax (now deprecated, but retained in Solaris, which takes backward compatibility seriously) env - /path/to/command to run /path/to/command in an empty environment. So env - /usr/bin/ksh -c /path/to/script will run the script in an empty environment and will not source any profile script. Ksh might set some environment variables on its own initiative: I don't know about ksh88, but ksh93 sets _ and PWD, and pdksh sets _ and PATH.

You can selectively or indiscriminately clear environment variables from inside ksh.

unset x
for x in $(typeset +x); do
  unset $x
done
5
me@local:~ $ env - /path/to/shell
$ env
_=/usr/bin/env
PATH=/usr/bin:/bin
RANDOM=24395
$

Notes:

  • I used a shell to have a look at the resulting environment, any command can be used (guess what env - /usr/bin/env returns)
  • (@jlliagre's comment:) env is a POSIX standard command.

Edit Clarified the answer.

sr_
  • 15,384