linux - 使用命令或 bash 脚本清理环境?

在 Bash shell 中,我想在使用命令运行时首先清理环境。

我想取消设置所有环境变量,只设置对 shell 运行至关重要的变量,以及我的脚本完成任务所需的变量。

有没有办法以一种简单而干净的方式做到这一点?

最佳答案

您可以使用 env 和包装脚本:

#!/bin/bash
env -i /path/to/main_script.sh

来自man env:

   -i, --ignore-environment
          start with an empty environment

当然,如果您手动运行脚本,您也可以将脚本作为 env -i script.sh 运行。不幸的是,据我所知,不能像这样使用脚本 shebang 通过 env 运行 bash ;根据定义,shebang 只能接受内核解析的两个参数。

我能想到的使用 envexec -c (几乎相同)的另一个半可靠解决方案是使用 exec -c $0 如果您检测到它不干净,则使用干净的环境重新运行脚本。假设 $HOME 设置在不干净的环境中,并且没有设置在干净的环境中(在我的安装中是这样):

#!/bin/bash
[ "$HOME" != "" ] && exec -c $0
# rest of the script here

https://stackoverflow.com/questions/9671027/

相关文章:

linux - tr 命令 - 如何将字符串 "\n"替换为实际的换行符 (\n)

c - 关于 putenv() 和 setenv() 的问题

c - bzero() & bcopy() 与 memset() & memcpy()

c - 为什么在 Linux 中使用 select

linux - 使用 Linux 加载程序时 ldconfig 错误 :"is not a symb

python - 如何关闭被杀死的程序打开的套接字?

linux - qstat 和长作业名称

linux - 除了使用 Ctrl + C 之外,如何在 linux 中停止正在运行的 R 命令?

python - 带有隐藏窗口的跨平台子进程

linux - cron 如何在内部安排作业?