Published Book on Amazon
All of IOT
Starting with the Latest Raspberry Pi from Beginner to Advanced – Volume 1 |
|
All of IOT
Starting with the Latest Raspberry Pi from Beginner to Advanced – Volume 2 |
출판된 한글판 도서
최신 라즈베리파이(Raspberry Pi)로 시작하는 사
물인터넷(IOT)의 모든 것 – 초보에서 고급까지 (상) |
|
최신 라즈베리파이(Raspberry Pi)로 시작하는 사
물인터넷(IOT)의 모든 것 – 초보에서 고급까지 (하) |
Original Book Contents
20.2.6 script 실행
20.2.6.1 script 파일 실행 준비
script는 일반적인 실행 프로그램처럼 binary 상태의 실행 파일은 아니지만, 하나의 프로그램으로서 자체적으로 실행될 수 있어야 한다. 따라서 script 파일에 실행(execute) 권한이 부여되어 있어야 한다. chmod 명령을 이용해서 원하는 권한을 부여할 수 있다. 파일의 권한에 대해서는 [13.2 파일에 대한 권한 변경]의 설명을 참조하기 바란다.
다음과 같은 script를 작성한 다음, "home/pi/Script/test_run.sh" 파일에 저장한다.
#! /bin/bash echo "This is running test" |
pi@raspberrypi ~ $ cd Script |
pi@raspberrypi ~/Script $ ls -l test_run.sh |
-rw-r--r-- 1 pi pi 30 Apr 29 16:43 test_run.sh |
이 상태에서 파일 경로와 script 파일이름을 입력하고 [Enter] 키를 눌러 script를 실행한다.
pi@raspberrypi ~/Script $ ./test_run.sh |
-bash: test_run.sh: command not found |
불행히도 시스템은 Bash가 그 명령을 실행할 수 없다는 메시지를 내 보낸다. 왜 이런 오류가 발생하는가? 그 이유는 이 파일이 실행할 수 있는 상태가 아니기 때문이다. 위에서 "test_run.sh" 파일의 권한 정보를 살펴 보면 실행(execute) 권한이 없는 것을 알 수 있다.
다음과 같이 "chmod" 명령으로 script 파일에 실행(execute) 권한을 부여하고, 결과를 확인한다.
pi@raspberrypi ~/Script $ chmod +x test_run.sh |
pi@raspberrypi ~/Script $ ls -l test_run.sh |
-rwxr-xr-x 1 pi pi 30 Apr 29 16:43 test_run.sh |
이제 다시 script를 실행해 본다. script가 정상적으로 실행되는 것을 알 수 있다.
pi@raspberrypi ~/Script $ ./test_run.sh |
This is running test |
20.2.6.2 script 파일 실행
script 파일은 기본적으로 일반 Shell 명령과 동일하게 실행할 수 있다. Terminal 화면에서 수동으로 입력하여 실행할 수도 있고, 다른 script의 내부에서 실행할 수도 있다.
일반적으로 script파일을 실행할 때는 반드시 directory와 파일 이름을 함께 지정해야 한다. script 파일이 현재 작업 directory에 있는 경우에도 "./script-file"처럼 directory를 반드시 지정해야 한다. 이것은 Shell이 해당 명령을 찾을 때 현재 작업 directory를 검색하지 않기 때문이다. 만약 현재 작업 directory를 기본적으로 검색하도록 하기 위해서는 환경변수 PATH에 현재 작업 directory "./"를 추가해 주어야 한다.
앞에서 작성한 "test_run.sh script"를 이용해서 테스트를 해보겠다. 현재 작업 directory가 "~/Script"인 상태에서 다음과 같이 script를 실행해 본다. 그러면 오류가 발생하는데, 이 메시지는 Bash가 "test_run.sh"를 찾지 못한다는 것이다. 현재 작업 directory가 "~/Script"에 있음에도 그 파일을 찾지 않는 것이다.
pi@raspberrypi ~/Script $ test_run.sh |
-bash: test_run.sh: command not found |
이번에는 현재 작업 directory를 명확하게 지정하여 다시 실행해 본다. 이제 script가 정상적으로 실행된다.
pi@raspberrypi ~/Script $ ./test_run.sh |
This is running test |
일반적으로 Shell이 명령을 실행할 때는 환경변수 PATH에서 지정한 경로를 이용하여 명령이 실제로 존재하는 위치를 찾게 되고, 명령을 찾지 못하면 그 명령을 실행하지 못하는 것이다. 아래는 환경변수 PATH에 어떤 값이 있는지를 확인해 본 것이다.
pi@raspberrypi ~/Script $ echo $PATH |
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/games:/usr/games |
위의 값을 보면 현재 작업 directory는 없다. Shell이 현재 작업 directory를 항상 찾도록 하려면, 여기에 현재 작업 directory를 의미하는 "./"를 추가해 주어야 한다.
아래는 "export" 명령으로 환경변수 PATH에 현재 작업 directory "./"를 추가하고, 다시 확인해 본 것이다.
pi@raspberrypi ~/Script $ export PATH="$PATH:./" |
pi@raspberrypi ~/Script $ echo $PATH |
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/games:/usr/games:./ |
이제는 파일 경로를 지정하지 않고 순수하게 script 파일 이름만으로 실행해 보자. 그러면 정상적으로 실행이 되는 것을 알 수 있다. 즉 PATH에서 지정해 준 "./" 경로가 적용이 된 것이다.
pi@raspberrypi ~/Script $ test_run.sh |
This is running test |