命令“printenv”和“env”之间有什么区别?一个命令相对于另一个命令有什么优势?
谢谢
答案1
请在这里寻找答案:
https://unix.stackexchange.com/a/284069/448694
总体而言,
env
用例比较printenv
:
打印环境变量,但
printenv
可以做同样的事情禁用 shell 内置功能,但
enable
也可以使用 cmd 来实现。设置变量但毫无意义,因为有些 shell 已经可以在没有它的情况下做到这一点
env
,例如
$ HOME=/dev HOME=/tmp USER=root /bin/bash -c "cd ~; pwd"
/tmp
#!/usr/bin/env python
env
标头,但如果不在 /usr/bin 中,仍然不可移植
env -i
,禁用所有环境。我发现找出某个程序的关键环境变量很有用,以便让它从运行crontab
。例如1在交互模式下,运行declare -p > /tmp/d.sh
到存储属性变量。[2] 在中/tmp/test.sh
,写入:. /tmp/d.sh; eog /home/xiaobai/Pictures/1.jpg
[3] 现在运行env -i bash /tmp/test.sh
[4] 如果成功显示图像,则删除中的一半变量/tmp/d.sh
并再次运行env -i bash /tmp/test.sh
。如果失败,请撤消它。重复该步骤以缩小范围。[5] 最后我弄清楚eog
需要$DISPLAY
在中运行crontab
,并且缺少$DBUS_SESSION_BUS_ADDRESS
会减慢图像的显示速度。
target_PATH="$PATH:$(sudo printenv PATH)";
直接使用根路径而无需进一步解析env
或的输出很有用printenv
。
例如:
xb@dnxb:~$ sudo env | grep PATH
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
xb@dnxb:~$ sudo printenv | grep PATH
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
xb@dnxb:~$ sudo printenv PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
xb@dnxb:~$ sudo env PATH
env: ‘PATH’: 没有这样的文件或目录
xb@dnxb:~$