如何在 ksh shell 中获得干净的环境?

如何在 ksh shell 中获得干净的环境?

我需要删除 Ksh shell 中的所有环境变量。我可以分叉一个新实例,但它不可避免地会获取一些初始化文件(据我所知.profile.kshrc)。有没有办法绕过这些文件以及可能在初始化时读取的任何其他文件的来源?

  • Ksh版本:版本M-11/16/88i
  • 操作系统:Solaris 10

希望我说得足够清楚。

答案1

~/.profile只能由登录 shell 读取。~/.kshrc仅针对交互式 shell 执行。

Solaris支持在空环境中运行的env语法(现已弃用,但在 Solaris 中保留,它非常重视向后兼容性) 。因此将在空环境中运行脚本,并且不会获取任何配置文件脚本。 Ksh 可能会主动设置一些环境变量:我不知道 ksh88,但 ksh93 设置和,pdksh 设置和。env - /path/to/command/path/to/commandenv - /usr/bin/ksh -c /path/to/script_PWD_PATH

您可以有选择地或不加区别地从 ksh 内部清除环境变量。

unset x
for x in $(typeset +x); do
  unset $x
done

答案2

me@local:~ $ env - /path/to/shell
$ env
_=/usr/bin/env
PATH=/usr/bin:/bin
RANDOM=24395
$

笔记:

  • 我使用 shell 来查看生成的环境,可以使用任何命令(猜猜env - /usr/bin/env返回什么)
  • (@jlliagre 的评论:)env是 POSIX 标准命令。

编辑澄清了答案。

相关内容