Linux 中 env 与 printenv 命令的优点/区别

Linux 中 env 与 printenv 命令的优点/区别

命令“printenv”和“env”之间有什么区别?一个命令相对于另一个命令有什么优势?

谢谢

答案1

请在这里寻找答案:
https://unix.stackexchange.com/a/284069/448694

总体而言,env用例比较printenv

  1. 打印环境变量,但printenv可以做同样的事情

  2. 禁用 shell 内置功能,但enable也可以使用 cmd 来实现。

  3. 设置变量但毫无意义,因为有些 shell 已经可以在没有它的情况下做到这一点 env,例如
    $ HOME=/dev HOME=/tmp USER=root /bin/bash -c "cd ~; pwd"
    /tmp

  4. #!/usr/bin/env pythonenv标头,但如果不在 /usr/bin 中,仍然不可移植

  5. 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会减慢图像的显示速度。

  6. 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:~$

相关内容