문제 상황
앞선 글 : su - 명령어를 통한 계정 변경
기존에는 아래 방식을 통해 mysql 유저로 전환하였다.
$> su mysql
이 방식을 사용하게 되면, 해당 명령어를 실행한 디렉토리가 로그인 후 에도 그대로 유지 되기 때문에, cd 명령어를 통해 유저의 홈 디렉토리로 다시 이동하는 과정이 필요했다.
사실 이보다 더욱 중요한 점은, 'su mysql'을 시도한 OS 계정의 환경 변수가, 계정이 변경 된 후에도 unset 되지 않는다는 점이다.
나는 cd 명령어를 한번 더 쓰기 번거로웠고, 아래 방식으로 전환하였다.
$> su - mysql
문제가 발생한 상황은 다음과 같다.
'su - mysql' 을 통해 OS 계정을 변경하였더니,
/home/mysql/.bashrc 파일이 적용되지 않았다.
해당 파일에 /mysql/bin/ PATH 를 추가하는 구문이 있었기 때문에,
이 파일이 적용되지 않아 mysql : command not found 오류가 발생하였다.
/mysql/bin/ PATH 를 추가하는 구문 (적용되지 않음)
export PATH=$PATH:/usr/local/mysql/bin/
발생 오류
-bash: mysql: command not found
발생 원인
이 문제가 발생한 상황을 이해하기 위해서는
Login Shell과 Non-Login Shell 을 이해해야 한다.
Login Shell
계정과 암호를 입력해서 Shell 을 실행하는 것
따라서, ssh 를 통한 접속 등은 Login Shell에 해당한다.
Non-Login Shell
로그인 없이 실행하는 Shell
ssh로 접속하고 나서 다시 bash를 실행하는 경우 Non-Login Shell에 해당한다.
기존에 export 문을 작성한 /home/mysql/.bashrc 파일은, Login Shell 에서 호출되지 않는다.
su - 명령어의 경우, su -l, su --login 과 같은 의미이다.
즉, Login Shell 이다.
그렇기 때문에 .bashrc 파일이 호출되지 않은 것이다.
Login Shell이 실행 될 때 로드 되는 파일은 ~/.profile 또는 ~/.bash_profile 파일이므로, 해당 파일에 export command 를 설정하여야 한다.
해결
.bashrc 파일이 아니라,
.profile 파일에 export command를 작성
# .bash_profile, .profile 두 파일 모두 적용 되는 것을 확인하였음.
-bash-4.2$ cat ~/.bash_profile
export PATH=$PATH:/usr/local/mysql/bin/