在sudo命令内设置的环境变量无法访问问题求助
问题分析:sudo csh脚本中echo环境变量无输出的原因及解决办法
你的问题出在here-document的变量展开时机上:
当你用<<EOF这种未加引号的here-document时,当前执行脚本的shell(不是sudo启动的csh)会先解析所有以$开头的变量,再把解析后的内容传给csh执行。而你的当前shell里并没有定义OS变量,所以$OS被直接替换成了空字符串,传到csh里的其实是echo (空命令),自然没有输出。
两种解决办法:
- 给EOF加单引号,让当前shell完全不解析here-document里的内容,直接原封不动传给csh:
sudo -s /bin/csh <<'EOF' xauth merge /home/`logname`/.Xauthority setenv OS blah echo $OS gvim EOF
- 转义$符号,阻止当前shell展开
$OS,让csh自己处理这个变量:
sudo -s /bin/csh <<EOF xauth merge /home/`logname`/.Xauthority setenv OS blah echo \$OS gvim EOF
另外提一句:你脚本里的logname用反引号执行是没问题的,因为你需要获取原用户的用户名,当前shell执行这个命令正好符合需求,不用改。
内容的提问来源于stack exchange,提问作者beyonddc
相关产品推荐
相关产品推荐

