0

IronPython 프로젝트와 Orchard CMS 프로젝트의 소스 코드를 살펴 보았습니다. IronPython은 Microsoft.Scripting.Hosting.Shell (DLR의 일부)이라는 네임 스페이스로 작동합니다. Orchard Project는 다양한 인터페이스 (IShellContainerFactory, IShellSettings)에서 간접적으로 '셸'개념으로 작동합니다.'쉘'의 역할/책임은 무엇입니까?

위에서 언급 한 프로젝트 중 어느 것도 정교한 문서가 없으므로 원본을 읽음으로써 전체 응용 프로그램 구조/구조를 파악하려는 경우 이름에서 유형 (클래스 등)의 의미를 찾아내는 것이 매우 중요합니다. 암호.

이제 나는이 소스 코드의 작성자가 '셸'을 참조 할 때 염두에 두어야 할 사항에 대해 궁금해합니다. '셸'이라는 단어가 들리면 명령 줄 해석기와 같은 것을 생각합니다. IronPython은 인터랙티브 인터프리터를 가지고 있기 때문에 IronPython은이 의미가 있습니다. 그러나 나에게 그것은 웹 CMS와 관련하여별로 의미가 없다.

내가 '쉘'이라고 불리는 것을 만나면 어떻게 생각합니까? 일반적으로 '쉘'의 역할과 책임은 무엇입니까? 그 질문에 답을 줄 수 있습니까? '껍질'의 의미는 주관적인 것인가?

감사합니다.

답변

1

쉘에 대한 일반적인 의미는 '명령을 해석하고 실행하는 사용자 프로세스'라고 생각합니다.

  1. '사용자 프로세스': 운영 체제 커널에 내장 된 과정에서로 구분. IBM 메인 프레임 세계의 JCL은 쉘로 간주하기가 어려울 것입니다.

  2. '해석하고을 실행': 어떤 모양이나 형태, 쉘은 파일 또는 터미널에서 명령을 읽고, 오히려 엄격하게 명령의 특정 시퀀스를 수행하도록 프로그램되는 것이 아니라, 제시 무엇에 반응한다.

  3. '명령 : 명령이 컨텍스트에 따라 다릅니다. 표준 유닉스 셸에서 실행되는 명령은 주로 다른 프로그램과 셸이 적절하게 함께 연결되어 있습니다. 분명히 기본 제공 명령이 있으며 일반적으로 명령 실행 결과에 대한 적절한 대응을 허용하는 흐름 제어 구문이 있습니다.

다른 상황에서는 다른 종류의 명령을 실행하는 것이 합리적입니다. 예를 들어, 사용자는 데이터베이스에 연결되어있는 동안 SQL 문을 실행할 수있는 'SQL Shell'을 구상 할 수 있습니다.

파이썬 쉘은 파이썬 표기법을 지원하며 파이썬 구문과 밀접한 구문을 사용하여 파이썬과 유사한 명령문을 실행합니다. Perl 쉘은 Perl과 같은 표기법을 지원하고 Perl과 같은 명령문을 실행합니다 ... 그러면 목록이 계속됩니다. (예를 들어, Tcl은 tclsh - Tcl 쉘을 가지고 있습니다.)

2

Orchard에서 "쉘"이라는 용어는 실제로 스코프에 대한 은유입니다. 호스트, 쉘 및 작업의 세 가지 중첩 범위가 있습니다.

호스트는 웹 응용 프로그램 도메인 기간 동안 존재하는 단일 컨테이너입니다.

쉘은 현재 구성에 따라 작성된 호스트에 의해 작성된 하위 컨테이너입니다.구성이 변경되면 새 쉘이 빌드되고 기존 쉘이 제거됩니다.

작업은 단일 요청 기간 동안 살아있는 구성 요소를 보유하고있는 쉘에 의해 작성된 또 다른 컨테이너입니다.

셸 컨테이너 사용에 대한 좋은 점 중 하나는 정적 변수 사용을 피하고 구성 변경시 응용 프로그램 도메인을 순환시킬 필요가 없다는 것입니다. 또 다른 좋은 점은 호스트가 여러 개의 쉘을 보유하고 각 요청에 대해 적절한 쉘을 사용하는 경우 동시에 Orchard 앱 도메인이 둘 이상의 "사이트"를 제공 할 수 있다는 것입니다.