스크립트가 대화형 셸 또는 다른 스크립트에 의해 호출되는지 확인하는 방법은 무엇입니까?

스크립트가 대화형 셸 또는 다른 스크립트에 의해 호출되는지 확인하는 방법은 무엇입니까?

스크립트에서 결정하는 것은 매우 간단합니다.실행 중인 코드가 대화형 셸에서 실행되고 있지 않습니다., 그러나 스크립트를 작성할 때 이미 알고 있으므로 함수 내부 이외의 용도로 사용되는지는 확실하지 않습니다(또는 스크립트를 얻는 경우).

스크립트에서 스크립트가달리기대화형 쉘입니까, 아니면 다른 스크립트로 실행됩니까? 즉, 상호작용성을 어떻게 결정합니까?호출자, 소집자대본에서? 즉, 어떻게 알 수 있나요?부모쉘은 대화형인가요?

더 명확히 하자면, 저는 그런 말을 하려는 것이 아닙니다.가장 가까운 대화형 조상의 이름 찾기, 난 그냥 알아내고 싶을 뿐이야만약에이것즉각적인부모가 상호 작용합니까?

이것이 쉘에 따라 다르다면 나는 zsh에 가장 관심이 있지만 bash에도 관심이 있습니다.

답변1

스크립트가 로 시작하면 #!/path커널은 관련되지 않은 새 셸을 시작합니다.

스크립트에 셸 명령만 포함된 경우 셸은 분기되고 오류를 수신하며 ENOEXEC모든 플래그를 기본값으로 재설정한 다음 분기된 하위 프로세스가 스크립트를 실행합니다.

따라서 getppid()와 같은 것을 사용하고 프로세스 테이블을 확인하지 않으면 이 작업을 수행할 수 없습니다.

관련 정보