C=D > E=F" # env A=B C=D E=F TERM=xterm SHELL=/bin/bash USE-6ren">
gpt4 book ai didi

shell - 列出busybox中的所有环境变量名

转载 作者:行者123 更新时间:2023-12-01 10:05:33 26 4
gpt4 key购买 nike

具有多行值的环境变量可能会混淆 env 的输出:

# export A="B
> C=D
> E=F"
# env
A=B
C=D
E=F
TERM=xterm
SHELL=/bin/bash
USER=root
MAIL=/var/mail/root
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
PWD=/root
LANG=en_US.UTF-8
PS1=\h:\w\$
SHLVL=1
HOME=/root
LOGNAME=root
_=/usr/bin/env

在这种情况下,我不能只使用 awk -F= 来提取所有名称,因为它显示错误的名称 C E:

# env | awk -F= '{print $1}'
A
C
E
TERM
SHELL
USER
MAIL
PATH
PWD
LANG
PS1
SHLVL
HOME
LOGNAME
_

然后我发现 env 支持标志 -0 以 0 字节而不是换行结束每个输出行,所以使用 sed 我可以切断 bash 中的值:

# env -0 | sed -e ':a;N;$!ba;s/\([^=]\+\)=\([^\x00]*\)\x00/\1\n/g'
A
TERM
SHELL
USER
MAIL
PATH
PWD
LANG
PS1
SHLVL
HOME
LOGNAME
_

但是 BusyBox 的 env 版本 does not support标记 -0。还有其他方法吗?

最佳答案

如果您使用的是 linux(我认为 busybox 只能在 linux 上运行,但我可能错了),/proc/self/environ包含与 env -0 形式相同的 NUL 分隔环境给你。您可以替换 env -0 |< /proc/self/environ .

sed -e ':a;N;$!ba;s/\([^=]\+\)=\([^\x00]*\)\x00/\1\n/g' < /proc/self/environ

关于shell - 列出busybox中的所有环境变量名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11161373/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com