[Docker] Shell(쉘) 변수DevOps/Docker2022. 5. 11. 16:37
Table of Contents
728x90
✔️ Shell(쉘) 변수
Shell에서 $
표시는 모두 변수를 참조한다는 뜻이다.
a.sh
#!/bin/sh
echo "\$MSG = $MSG" # MSG 변수를 출력
echo "\$@ = $@"
echo "\$0 = $0" # 출력된다.
echo "\$1 = $1"
vagrant@docker ~ ./a.sh abc xyz 123 456 789 111
$MSG =
$@ = abc xyz 123 456 789 111
$0 = ./a.sh
$1 = abc
$2 = xyz
$3 = 123
- $0 - 명령어
- $n(n = 1, 2, 3...) - 인자
- $@ : 명령어를 제외하고 나머지 모든 인수
vagrant@docker ~ MSG="hello world"
vagrant@docker ~ ./a.sh abc xyz 123 456 789 111
$MSG =
$@ = abc xyz 123 456 789 111
$0 = ./a.sh
$1 = abc
$2 = xyz
$3 = 123
MSG에 helloworld가 출력되지 않았다. 왜 그럴까 ?
vagrant@docker ~ export MSG="hello MESSAGE"
vagrant@docker ~ ./a.sh abc xyz 123 456 789 111
$MSG = hello MESSAGE
$@ = abc xyz 123 456 789 111
$0 = ./a.sh
$1 = abc
$2 = xyz
$3 = 123
위와 같이 export로 변수를 내보내야만 이 변수를 사용할 수 있다.
vagrant@docker ~ MSG="hello world" ./a.sh abc xyz 123 456 789 111
$MSG = hello world
$@ = abc xyz 123 456 789 111
$0 = ./a.sh
$1 = abc
$2 = xyz
$3 = 123
리눅스 시스템은 해당 명령어 한정으로 제공할 변수를 설정할 수 있다.
변수의 scope이 프로세스에만 한정되는 것이다.
vagrant@docker ~ docker run -it httpd bash
root@0a1a4f2f5231:/usr/local/apache2# cd /usr/local/bin/
root@0a1a4f2f5231:/usr/local/bin# cat httpd-foreground
#!/bin/sh
set -e
# Apache gets grumpy about PID files pre-existing
rm -f /usr/local/apache2/logs/httpd.pid
exec httpd -DFOREGROUND "$@"
root@0a1a4f2f5231:/usr/local/bin# ./httpd-foreground -l
httpd 컨테이너를 실행할 때는 내부적으로 CMD로 httpd-foreground 파일을 실행한다.
httpd-foreground 의 내용을 보면 그 안에서는 Exec Form으로 httpd -DFOREGROUND를 실행하고 있다.
옵션을 지정해서 명령을 실행하면 $@에 옵션이 지정된다.
다시말하면 httpd -DFOREGROUND는 default로 실행되며 추가 옵션(ex. -l)을 붙이면 httpd -DFOREGROUND -l로 실행된다.
728x90
'DevOps > Docker' 카테고리의 다른 글
[Docker] Dockerfile 이미지 빌드와 Cache (0) | 2022.05.11 |
---|---|
[Docker] ubuntu 이미지로 httpd 서비스 이미지 만들기 ( + Timezone 세팅) (0) | 2022.05.11 |
[Docker] Dockerfile로 이미지 빌드하기 (0) | 2022.05.11 |
[Docker] 이미지 레이어(Layer) (0) | 2022.05.11 |
[Docker] docker commit 명령을 이용하여 이미지 빌드하기 (0) | 2022.05.10 |
@TTOII :: 뭉게뭉게 클라우드
영차영차 성장 블로그
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!