我需要删除 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/command
env - /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 标准命令。
编辑澄清了答案。