-
반응형
Bash(Bourne-again shell)란, GNU 프로젝트를 위해 만들어진 유닉스 쉘로써, GNU 운영체제와 리눅스, 맥 OSX 등 다양하게 사용되고 있다. Bash 명령어의 문법은 대부분 sh와 호환되어 있고, 스크립트로 작성해서 사용할 수 있다. 대부분 C언어를 알고 있으면 쉽게 사용할 수 있도록 설계 되었다. 이번에 이야기할 내용은 bash의 환경변수이다.
Enviroment variables(환경변수)란
대부분의 bash 그리고 다른 shell에서는 전역적인 변수를 설정 할 수 있다. 내부적으로 ASCII string으로 저장되며, 쉘뿐만아니라 작성된 프로그램에서도 시스템에서 지원하는 함수를 통해서 접근할 수 있다. 이렇게 설정되는 시스템 환경변수들은 시스템과 프로그램들이 전역적으로 사용할 변수사항들을 저장해놓고 사용하게 된다.
- Lang
- Path
- SSH
- User
- Program Setting
- ...
다음은, 시스템에서 지원하는 API 함수이다.
NAME
getenv, putenv, setenv, unsetenv -- environment variable functions
LIBRARY
Standard C Library (libc, -lc)
SYNOPSIS
#include <stdlib.h>
char * getenv(const char *name);
int putenv(char *string);
int setenv(const char *name, const char *value, int overwrite);
int unsetenv(const char *name);
example) PATH와 LANG의 환경변수의 값을 읽어들여서 출력.
#include <stdio.h> #include <stdlib.h> int main(int argc, char* argv[]) { char* path = NULL; char* lang = NULL; path = getenv("PATH"); lang = getenv("LANG"); printf("environment variable PATH=%s\n", path); printf("environment variable LANG=%s\n", lang); return 0; }
환경변수 뿐만 아니라, 쉘에서는 일반변수도 만들어서 사용할 수 있다.
$ var1='var1 is vraible'$ echo $var1var1 is vraible변수에 접근하는 방법은 변수명에 $를 붙여주면 된다. 주의사항으로 'key=value'에서 '=' 앞뒤에 빈 공백이나 탭을 사용하게 되면 원치 않은 값(공백 또는 탭)이 들어가거나 문법오류가 발생한다.$ echo $var1var1 is vraible이렇게 만든 변수를 export 명령어를 사용하여 환경변수로 만들면 된다.export EDITOR=viprintenv 명령어로 환경변수 리스트를 조회할 수 있다.$ printenv | grep EDITOREDITOR=vi설정된 환경변수를 삭제하고 싶을 때는 unset을 사용한다.
$ unset EDITOR
EDITOR 환경변수를 export 명령어로 설정해주었다고 할 때 새로운 터미널을 열어서 printenv 명령어로 환경변수 리스트를 조회해보면 EDITOR가 없다. 이유는 명령을 내린 터미널에서만 유효하기 때문에 환경변수를 계속 유지하려면 추가적인 작업을 해야한다.
프로그램 환경변수 설정
프로그램에서 환경변수를 설정하는 경우는, /etc/profile.d/ 디렉토리에 추가하면 되고 파일을 추가하고 파일안에 export KEY=VALUE를 넣으면 된다. 이렇게 추가된 환경변수는 모든 계정에서 사용 가능하게 된다.
사용자 계정 환경변수 설정
프로그램에서 필요한 정보가 아닐 경우는 일반적으로 사용자 계정 환경변수에 넣는다.
$HOME/.bash_profile에 설정 내용을 넣어주면 된다.. bash_profile은 로그인할 때마다 실행해주는 스크립트이다.
~/.bash_profile
# ~/.bash_profile: executed by bash(1) for login shells.
# see /usr/share/doc/bash/examples/startup-files for examples.
# the files are located in the bash-doc package.
export EDITOR=vi
보통, desktop환경에서는 재 로그인하는 경우가 많지 않기 때문에 bashrc에 bash_profile이 실행되도록 해주면 유용하다. bashrc는 bash가 실행될 때 마다(터미널이 실행될 때 마다) 파일안의 내용이 실행된다.
if [ -f "~/.bash_profile" ]; then
. ~/.bash_profile
fi
반응형