이 exec 명령은 현재 쉘 프로세스를 지정된 명령으로 바꿉니다. 일반적으로 명령을 실행하면 새 프로세스가 생성됩니다 (포크 됨). 이 exec 명령은 새로운 프로세스를 생성하지 않습니다. 대신, 현재 프로세스는 새로운 명령으로 겹쳐집니다. 즉, exec새 프로세스를 작성하지 않고 현재 쉘 대신 명령이 실행됩니다.
exec 명령의 가장 일반적인 용도는 세 가지입니다.
1. 공정 교체
예 -1 : 다음bash 과 같이
새쉘을 여는 경우
$ bash
에 pstree이처럼 보인다
gno─ 그놈 터미널
├─bash───bash───pstree
이전 bash쉘이 여전히 있으며 새 bash쉘 을 얻었습니다 . 새로운 bash 쉘을 열면
$ exec bash
pstree쇼
gno─ 그놈 터미널
├─bash───pstree
여기서 오래된 bash것은 새로운 것으로 대체됩니다. 하나의 명령으로 여러 로그인을 종료하는 것이 특히 유용합니다. 더 안전하고 실수로 열린 터미널을 떠날 가능성을 없애줍니다. 하나의 명령으로 루트와 사용자 모두 종료를 참조하십시오.
예 -2 : 파일을 다음과 같이 열 수 있습니다
$ exec vi filename.txt
종료 vi하면 쉘이 이미 교체되었으므로 터미널을 별도로 닫을 필요가 없습니다. vi를 닫 자마자 터미널도 닫힙니다.
2. 쉘 스크립트 내에서 파일 디스크립터의 경로 재 지정 방법
exec 명령은 또한 가까운 쉘 스크립트에서 동적으로 열고 사용하고, 파일 기술자를 복사 할 수 있습니다. 이를 통해 명령 호출 문자열 대신 STDIN, STDERR, STDOUT 및 기타 파일 디스크립터를 쉘 스크립트 내의 다양한 파일로 경로 재 지정할 수 있습니다. 명령이나 인수를 지정하지 않으면 리디렉션 심볼과 파일 설명자를 지정하여 이러한 기능을 수행 할 수 있습니다.
script.sh로그 파일을 갖고 싶은 쉘 스크립트가 있다고 가정하면 다음 과 같이 script.log사용할 수 있습니다 exec.
LOG=/path/to/script.log
exec 1>>$LOG
exec 2>&1
어느 것이
./script &>> /path/to/script.log
./script >> /path/to/script.log 2>&1
3. exec 명령을 사용하여 프로세스 단계 작성
exec 명령을 사용하여 프로세스 단계와 같이 순차적으로 서로를 실행하는 쉘 스크립트 세트를 작성할 수도 있습니다. 컨트롤을 다음 스크립트로 전송해야 할 때마다 새 프로세스를 생성하는 대신 exec 명령을 실행합니다.
이 경우 각 단계의 마지막 문장은 exec다음 단계를 호출하는 명령 이어야합니다 .
자세한 내용 은 exec쉘 스크립트 에서 명령 사용을 참조하십시오 .
참고 : 위의 일부는 이것 에서 가져옵니다 .