su -l root -c "echo $HOME" 내 사용자 홈페이지를 인쇄합니다.

su -l root -c "echo $HOME" 내 사용자 홈페이지를 인쇄합니다.

이것은 내 첫 번째 기사입니다.

su - [user] -c [command]에 대해 몇 가지 질문이 있습니다.

검색 좀 하다가 이런 걸 발견했어요철사또 다른내 문제와 관련된 사람은 누구입니까?

사용자의 환경 변수가 존재하지 않는 경우 이를 설정하려고 합니다.

# This function checks for a user $1, a var nammed $2 to $3 and set it to $3 if $2 not set.
# $1: User to set env
# $2: Var to set
# $3: Value to add in $2 if not exist in $2
function setEnvIfNotDef () {
  if [ ! su ${1} -c "echo "${!2}" | grep "${3}"" ]
  then
    if [ ${2} = "PATH" ]
    then
        su ${1} -c "export ${2}=${!2}:${3}"
    else
        su ${1} -c "export ${2}=${3}"
    fi
  fi
}
setEnvIfNotDef ${USER_NAME} "TEST_HOME" ${INSTALL_PATH}

(내 코드에는 USER_NAME과 INSTALL_PATH가 정의되어 있습니다^^)

문제는 Yosemite/CentOS7의 터미널에서 su - root -c 명령을 시도할 때입니다.

Elio@Hackintosh-Elio [16:43:41] [Elio] #7975 $ su - root -c "whoami"
Password:
root
Elio@Hackintosh-Elio [16:43:59] [Elio] #7976 $ su - root -c "echo $HOME"
Password:
/Users/Elio

su 뒤의 -는 -l과 같습니다. 그렇죠? 루트 환경에 있으면 안 되나요?

도와주세요? :)

감사해요

답변1

이중 아포스트로피 대신 단일 아포스트로피를 사용하세요.

$ su - -c 'echo $HOME'                            
Password: 
/root

관련 정보