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