프로세스가 컴퓨터에서 동작하는 방식에 영향을 미치는 동적인 값들의 모임
사전적으로는 위와 같이 나타낼 수 있는데,
간단하게 이해하자면 해당 환경에서 프로그램을 돌릴 때 사용할 수 있는 변수라고 할 수 있다.
env 명령어를 통해 현재 환경 변수를 확인할 수 있다.
위와 같은 test.sh 이라는 쉘 스크립트가 있을 때 이 프로그램은 PATH라는 변수를 필요로 한다. 이 PATH 변수는 해당 환경 내에서 정의되어 있는 환경변수이기 때문에 적절히 변환되어 사용이 가능한 것이다.
환경변수들 중에서도 PATH는 pipex와 minishell 과제에서 유의깊게 살펴보아야 한다.
PATH는 어떤 프로그램을 실행시킬 때 실행 파일을 찾을 경로를 저장해놓는 변수이다. PATH에는 여러 경로가 저장되어 있고, 그 경로들은 각각 : 로 구분되어 있다.
따라서 현재 내 환경 변수에 저장되어 있는 경로들은 다음과 같다.
어떤 프로그램(command)를 실행시킬 때 bash는 다음과 같은 방식으로 command 실행 파일의 경로를 찾는다.
예시 )
pipex와 minishell에서 command에 /bin/ls와 같이 절대 경로가 들어올 수도 있지만 ls와 같이 경로가 없이 들어오는 케이스도 처리가 가능해야 하므로 PATH 정보를 적절히 parsing하여 저장하고 경로가 없는 command에 대해서는 실행 가능한 경로를 찾아, 경로를 붙여 execve 함수에 넘겨주어야 한다.
어떤 command에 대한 절대 경로는 which라는 명령어를 통해 확인 가능하다
프로그램 내에서 환경 변수는 다양한 방법으로 가져올 수 있는데 과제에서 사용 가능한 방법은 크게 두 가지가 있다.
extern char **environ
c 프로그램에서는 environ 이라는 환경 변수에 대한 전역변수가 이미 만들어져 있다. 이를 함수 내부에 작성해주면 사용이 가능하다.
다만 42에서는 전역변수에 대한 제한이 철저한 만큼 논란이 많으므로 주의가 필요하다.
int main(int argc, char *argv[], char *envp[])
main 함수에서 인자로 환경변수를 받는 방법도 있다.
전역변수가 아니므로 논란은 거의 없지만 계속 argument로 자료를 가지고 다녀야 한다는 단점이 있다.
🦋 pipex repo address
https://github.com/kyj93790/42-cursus/tree/master/pipex