为什么运行命令 as 会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上也尝试过,结果相似。
答案1
在 中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 中导出,您也会得到相同的效果,例如
foo=bar
echo $foo
sh -c 'echo $foo'