Eug*_*ash 151 bash environment-variables
我想在一个空的环境中运行一个程序(即没有设置 envariables)。如何在 bash 中做到这一点?
ams*_*ams 162
你可以这样做env
:
env -i your_command
Run Code Online (Sandbox Code Playgroud)
与下面的评论相反,这确实完全清除了环境,但它不会阻止your_command
设置新变量。特别是,运行 shell 会导致/etc/profile
运行,并且 shell 也可能有一些内置设置。
您可以通过以下方式检查:
env -i env
Run Code Online (Sandbox Code Playgroud)
即擦拭环境,然后打印。输出将为空白。
Kus*_*nda 57
一个“干净”的bash
环境可能与
$ env -i bash --noprofile --norc
Run Code Online (Sandbox Code Playgroud)
该env -i
命令执行命令行上给它的命令,而不会将旧shell环境的任何导出环境变量转移到执行程序的环境中。
该--noprofile
选项停止bash
读取系统范围或个人 shell 初始化脚本,否则登录 shell 会读取这些脚本。
该--norc
选项停止bash
读取个人 shell 初始化脚本,否则交互式 shell 会读取这些脚本。
Gil*_*il' 32
env -i somecommand
正如ams 已经提到的那样,在空环境中运行命令。
许多程序依赖于一些重要的环境变量,因此您可能希望保留它们:
env -i HOME="$HOME" LC_CTYPE="${LC_ALL:-${LC_CTYPE:-$LANG}}" PATH="$PATH" USER="$USER" somecommand
Run Code Online (Sandbox Code Playgroud)
或者,您可以登录到小型登录时环境。
ssh localhost somecommand
Run Code Online (Sandbox Code Playgroud)
这里大多数答案的问题是env -i
清除HOME
,所以即使你bash -l
在内部运行,它也不会读取你的.bash_profile
等。如果你正在寻找的是一个外壳,就像你刚刚完成了一次新登录一样,那么你想要这个:
env -i HOME="$HOME" bash -l -c 'your_command'
Run Code Online (Sandbox Code Playgroud)
例子:
$ export ABC=123
$ env -i HOME="$HOME" bash -l -c 'env' | grep ABC
$ env HOME="$HOME" bash -l -c 'env' | grep ABC
ABC=123
Run Code Online (Sandbox Code Playgroud)
小智 5
虽然接受的答案是正确的,但您通常想要做的是:
env -i bash -l -c "printenv; and any other commands"
这为您提供了简单但功能强大的 bash(与您在非交互模式下登录时获得的相同)。例如,设置语言、时区、家庭等。
归档时间: |
|
查看次数: |
103586 次 |
最近记录: |