腳本中使用$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這樣帳號環境變量的依賴。