转 Linux sudo命令
脚本中使用$HOME变量 问题描述:某些同事原来写的脚本中包含如下内容。
BIN_DIR=${HOME}/tools
TAIR_BIN_DIR=${HOME}/tair_bin
TAIR_SRC_DIR=${HOME}/tair_src
原来的使用习惯是:
直接登录admin的shell运行这些脚本。
改用个人帐号使用sudo -u admin example.sh
运行之后,发现脚本中$HOME变量获取成个人帐号家目录。
问题分析: sudo执行命令的时候,默认使用个人帐号的家目录赋值给$HOME变量。
比如张三执行 _sudo -u admin example.sh_得到的$HOME结果是 /home/zhangsan
原因是sudo命令默认不会修改$HOME变量,如果希望改变sudo中$HOME变量,
则需要增加-H参数: _sudo -u admin -H example.sh
举例如下: [yuanqiao@tair004013 ~]$ cat example.sh
#!/bin/sh BIN_DIR=${HOME}/tools
echo 'BIN_DIR='$BIN_DIR
[yuanqiao@tair004013 ~]$ sudo -u admin ./example.sh
BIN_DIR=/home/yuanqiao/tools
[yuanqiao@tair004013 ~]$ sudo -u admin -H ./example.sh
BIN_DIR=/home/admin/tools
解决方法: 虽然sudo -H这个参数能解决脚本的这个问题,但并不推荐大家使用sudo的-H参数,
因为执行脚本的时候并不一定知道脚本里面的变量是如何定义或获取的。 希望还是从脚本的编写角度出发,对脚本作适当修改,减少对admin/root这样帐号环境变量的依赖。