为什么运行命令作为sudo
回显变量的值,而在脚本中运行相同的命令却不sudo
回显它?
➜ echo "$XDG_CONFIG_HOME"
/Users/cc/.config
➜ sudo echo "$XDG_CONFIG_HOME"
/Users/cc/.config
➜ cat sample.sh
#!/usr/bin/env sh
echo "$XDG_CONFIG_HOME"
➜ ./sample.sh
/Users/cc/.config
➜ sudo ./sample.sh
➜
PS 在 linux 上也试过,结果相似。
在 中
sudo echo "$XDG_CONFIG_HOME"
,您的 shell 在运行之前扩展变量sudo
,并sudo
查看echo /Users/cc/.config
它正式运行的变量。在 中
sudo ./sample.sh
,sudo
启动一个 shell 来运行脚本,然后该 shell 进行扩展。现在,根据设置,sudo
可能会清理环境变量,以防止特权命令从中获取指令。请参阅
env_reset
、env_check
和设置,env_delete
以及选项。env_keep
-E
sudo
sudo
即使没有在原始 shell 中导出变量,您也会得到相同的效果,例如