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

rah*_*hmu 6 shell ksh environment-variables

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

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

希望我足够清楚。

Gil*_*il' 7

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

Solarisenv支持在空环境中env - /path/to/command运行的语法(现已弃用,但保留在 Solaris 中,它认真对待向后兼容性)/path/to/command。因此env - /usr/bin/ksh -c /path/to/script将在空环境中运行脚本,并且不会获取任何配置文件脚本。ksh 可能会主动设置一些环境变量:我不知道 ksh88,但 ksh93 设置了_and PWD,而 pdksh 设置了_and PATH

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

unset x
for x in $(typeset +x); do
  unset $x
done
Run Code Online (Sandbox Code Playgroud)


sr_*_*sr_ 5

me@local:~ $ env - /path/to/shell
$ env
_=/usr/bin/env
PATH=/usr/bin:/bin
RANDOM=24395
$
Run Code Online (Sandbox Code Playgroud)

笔记:

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

编辑澄清了答案。