2015-01-20 2 views
0

셸 프로그래밍의 기본 도움말을 찾고 있습니다.exec 명령 이해

우리는 foobar로 알려진 명령이 있다고 가정하고 foobar으로 쉘 프로세스를 대체 할 쉘 호출

  1. exec foobar
  2. exec 2> /var/log/foobar.log

답변

3

첫 번째 exec 명령은 명령 줄 터미널이 아닌 스크립트에서만 사용해야합니다. 별도의 하위 프로세스로 실행하지 않고 쉘을 프로그램 foobar으로 바꿉니다. exec foobar 이후의 스크립트에있는 명령은 실행되지 않습니다 (쉘이 실행하기 위해 foobar을 찾지 못하는 경우에도). 대화식 터미널 세션 인 경우 오류를보고하고 계속합니다. 명령 제공하면

exec [-cl] [-a name] [command [arguments]]

, 그것은 새로운 프로세스를 생성하지 않고 쉘을 대체합니다. -l 옵션이 제공되면 쉘은 command에 전달 된 0 번째 인수의 시작 부분에 대시를 배치합니다. 이것은 로그인 프로그램이하는 것입니다. -c 옵션을 사용하면 명령이 빈 환경에서 실행됩니다. -a이 제공되면, 쉘은 name을 제 0 인수로 command에 전달합니다. 어떠한 이유로 든 명령을 실행할 수 없으면 execfail 셸 옵션이 활성화되어 있지 않으면 비 대화 형 셸이 종료됩니다. 이 경우 실패를 반환합니다. 대화식 쉘은 파일을 실행할 수 없으면 실패를 리턴합니다.

두 번째 exec 표준 오류 스트림 파일 /var/log/foobar.log에 들어가도록 일을 변경합니다 (I/O 리디렉션하지만 명령). 셸에서 또는 쉘에서 실행 한 명령의 오류 메시지는 로그 파일로 이동합니다 (다른 I/O 리디렉션이 많은 경우는 예외).

명령을 지정하지 않으면 리디렉션을 사용하여 현재 셸 환경에 영향을 줄 수 있습니다. 리디렉션 오류가 없으면 반환 상태는 0입니다. 그렇지 않으면 반환 상태가 0이 아닙니다.

+0

많은 도움을 준 Jonathan에게 감사드립니다. – user3809572

1
exec foobar 

의 효과 것입니다. 나는 당신이 exec 2>/var/log/foobar.log을 의미하는 것이 아니라 오히려 exec foobar 2>/var/log/foobar.log이라고 생각합니다. 이렇게하면 지정한 로그 파일에 표준 오류 메시지 2 개가 전송됩니다. 설명서 페이지 here을 읽을 수 있습니다.

exec(1) 명령은 exec(3) 호출과 비슷합니다. 호출 된 프로세스의 코드 세그먼트를 호출 된 프로그램의 코드 세그먼트로 바꿉니다. 1과 3은 매뉴얼 페이지 섹션을 의미합니다.

+1

'exec 2>/var/log/foobar.log'는 구체적이고 유용한 의미가 있습니다. –

+0

자세한 답변을 보내 주셔서 감사합니다. – user902384