셸 프로그래밍의 기본 도움말을 찾고 있습니다.exec 명령 이해
우리는 foobar
로 알려진 명령이 있다고 가정하고 foobar
으로 쉘 프로세스를 대체 할 쉘 호출
exec foobar
exec 2> /var/log/foobar.log
셸 프로그래밍의 기본 도움말을 찾고 있습니다.exec 명령 이해
우리는 foobar
로 알려진 명령이 있다고 가정하고 foobar
으로 쉘 프로세스를 대체 할 쉘 호출
exec foobar
exec 2> /var/log/foobar.log
첫 번째 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이 아닙니다.
exec foobar
의 효과 것입니다. 나는 당신이 exec 2>/var/log/foobar.log
을 의미하는 것이 아니라 오히려 exec foobar 2>/var/log/foobar.log
이라고 생각합니다. 이렇게하면 지정한 로그 파일에 표준 오류 메시지 2 개가 전송됩니다. 설명서 페이지 here을 읽을 수 있습니다.
exec(1)
명령은 exec(3)
호출과 비슷합니다. 호출 된 프로세스의 코드 세그먼트를 호출 된 프로그램의 코드 세그먼트로 바꿉니다. 1과 3은 매뉴얼 페이지 섹션을 의미합니다.
'exec 2>/var/log/foobar.log'는 구체적이고 유용한 의미가 있습니다. –
자세한 답변을 보내 주셔서 감사합니다. – user902384
많은 도움을 준 Jonathan에게 감사드립니다. – user3809572