쉘은 사용자가 원하는대로 다른 프로세스를 실행할 수있는 편리한 UI입니다. 또한 스크립트를 실행하여 동일한 작업을 수행 할 수도 있습니다. 그게 전부입니다. 프로세스를 실행 한 후에는 프로세스 수행에 대한 책임이 없습니다.
당신은 완전히 같은 일을 할 수 있습니다 python
로 교체 할 수 있지만, 당신은 단지 mv
프로그램을 실행하는 chepner의 subprocess.call(["mv", "foo", "bar"])
을 입력해야하기 때문에 그 짜증나. 한 프로그램을 다른 프로그램으로 파이프하려면 5-10 줄이 필요합니다. 대화 형으로 글을 쓰는 재미는별로 없습니다.
KDE/Gnome/whatever로 바꾸고 실행하려면 프로그램을 두 번 클릭하십시오.하지만 인수를 포함 할 수 없기 때문에 융통성이 없으므로 자동화 할 수 없습니다.
2 가지 유형의 셸, 대화 형 셸 및 비대화 형 셸이 있다는 것을 알고 있습니다. 터미널 세션은 대화 형 셸과 상호 작용하고 스크립트는 비 대화 형 셸에서 실행됩니다. 하지만 실제로 입력과 출력물을 읽을 수있는 능력과 다른 점이 있습니까?
sh
을 실행할 수있는 두 가지 모드입니다. 수동으로 (대화식으로) 입력하는 데 도움이되는 편리한 키보드 단축키, 별칭 및 옵션을 원하지만 미리 작성된 스크립트를 실행할 때는 의미가 없거나 귀찮습니다.
쉘에서 스크립트를 호출하는 경우이 대화 형 쉘 또는 쉘 내의 새로운 비 대화식 쉘에서 실행됩니까?
새로운 독립 프로세스로 실행됩니다. 동일한 대화 형 쉘 인스턴스 (source yourscript
)로 실행할 수 있습니다. 이는 키보드에서 스크립트 내용을 입력하는 것과 기본적으로 같습니다.
또한 대화 형 셸 또는 그래픽 인터페이스를 통해 이진 파일을 실행하면 항상 셸에서 실행되거나 셸없이 실행될 수 있습니까?
프로세스는 항상 쉘과 완전히 독립적으로 실행되지만 동일한 터미널을 공유 할 수 있습니다.
모든 프로세스는 쉘을 통해 커널과 통신 말했다 것,
프로세스는 쉘을 통해 커널에 이야기하지 않았다. 그들은 syscalls를 통해 이야기합니다.
하지만 독커에서 진입 점을 바이너리 또는 "sh -c 바이너리"로 정의 할 수 있기 때문에 혼란 스럽습니다.
간단한 바이너리의 경우 두 개가 동일합니다.
예를 들면 프로세스가 자체적으로 수행하지 않기 때문에 파이프 또는 재 지정을 설정하면 sh -c
을 사용하여 대신 쉘을 수행 할 수 있습니다.
쉘은 명령 인터프리터입니다. 더 이상은 아니지만 덜합니다. 그것은 다른 실행 파일과 마찬가지로 실행 파일이기 때문에 게임에서 _not_이라는 것을 의미합니다. 일부 "프로그램"은 실제로 바이너리 또는 스크립트가 실행되기 전에 환경을 설정하기 위해 "래퍼 셸 스크립트"를 사용합니다. 그러나 그것은 그 "프로그램"이 어떻게 설정되는지에 달려 있습니다. 그러나 일반적으로 로그인하는 사용자, 즉 "로그인 쉘"에 대해 생성 된 초기 셸 프로세스가 있습니다. 이 프로세스에서 다른 모든 사용자 프로세스가 생성됩니다. – arkascha