Кіріспе

Unix қабықшасы

C қабықшасы (csh немесе жақсартылған нұсқасы, tcsh) – 1970 жылдардың соңында Берклидегі Калифорния университетінде аспирант болған кезде Билл Джой жасаған Unix қабықшасы. Ол кеңінен таратылды, алғашқы нұсқасы Бэркли бағдарламалық жасақтамасының (BSD) 2BSD нұсқасынан басталып, оны Джой 1978 жылы алғаш таратты. Идеялар мен кодқа ертерек үлес қосқандар Майкл Убелл, Эрик Оллман, Майк О'Брайен және Джим Кулп болды. C қабықшасы – бұл командалық процессор, ол әдетте мәтіндік терезеде іске қосылады, пайдаланушыға командаларды теруге және орындауға мүмкіндік береді. C қабықшасы «скрипт» деп аталатын файлдан да командаларды оқи алады. Барлық Unix қабықшалары сияқты, ол файл атауларымен жұмыс істеуге арналған жабайы символдарды, құбырларды, деректерді беруді, командаларды алмастыруды, айнымалыларды және шартты тексерулер мен қайталау үшін басқару құрылымдарын қолдайды. C қабықшасын басқалардан ерекшелендіргені, әсіресе 1980 жылдары, оның интерактивті мүмкіндіктері мен жалпы стилі болды. Жаңа мүмкіндіктері оны пайдалануды оңайлатып, жылдамдатты. Тілдің жалпы стилі C тіліне ұқсас болды және оқуға ыңғайлы деп есептелді. Көптеген жүйелерде, мысалы, macOS және Red Hat Linux, csh іс жүзінде tcsh болып табылады, ол csh-тің жақсартылған нұсқасы. Көбінесе екі файлдың бірі – екіншісіне қатаң сілтеме немесе символдық сілтеме болып табылады, сондықтан екі атау да C қабықшасының бірдей жақсартылған нұсқасына сілтеме жасайды. Бастапқы csh коды мен бинарлық файлы NetBSD құрамына кіреді. Debian және оның кейбір туындыларында (Ubuntu-ны қоса алғанда) екі түрлі пакет бар: csh және tcsh. Біріншісі csh-тің бастапқы BSD нұсқасына негізделген, ал екіншісі tcsh-тің жақсартылған нұсқасы. tcsh файл атауларын және командаларды автоматты түрде толықтыру және командалық жолды өңдеу мүмкіндіктерін Tenex жүйесінен алған, осы жүйе «t» әрпінің шығу тегі болып табылады. Ол тек функционалдылықты қосып, бұрыннан бар нәрсені өзгертпегендіктен, tcsh бастапқы C қабықшасымен кері үйлесімді болып қалды. Бұл Джой жасаған бастапқы код ағашынан қосалқы тармақ ретінде басталса да, қазір tcsh дамудың негізгі тармағы болып табылады. tcsh өте тұрақты, бірақ жаңа нұсқалар жылына шамамен бір рет шығады, көбінесе ұсақ қателерді түзетуден тұрады.

Жобалау мақсаттары мен ерекшеліктері

C қабығының негізгі жобалау мақсаттары – оның C бағдарламалау тіліне көбірек ұқсауы және қолданушымен өзара әрекеттесу үшін ыңғайлы болуы еді.

Дәл С сияқты

Unix жүйесі негізінен C тілінде жазылғандықтан, C қабығының бірінші мақсаты – жүйедегі қалған бөліктерге стиль жағынан үйлесімді келетін команда тілі құру болды. Кілт сөздер, жақшаларды пайдалану, C қабығының енгізілген өрнек грамматикасы және массивтерді қолдауы C тілінің күшті ықпалында болды.

Қазіргі стандарттар бойынша, C қабығы көптеген басқа танымал сценарий тілдерінен C тіліне ұқсамайтын сияқты көрінеді. Бірақ 80-ші және 90-шы жылдары аралығында бұл айырмашылық ерекше көзге түсетін, әсіресе Стивен Борнның Bell Labs-те жазған, сол кездегі басым қабықша – Борн қабығымен (sh деп те аталады) салыстырғанда. Бұл мысал C қабығының дәстүрлі өрнек операторлары мен синтаксисін көрсетеді. Борн қабығында (sh) өрнек грамматикасы болмаған. Төртбұрышты жақшадағы шарттық тексеру сыртқы «test» бағдарламасын іске қосу арқылы баяу әдіспен бағалануы керек болды. sh қабығының «if» командасы аргументтерді жаңа команда ретінде, қосалқы процесс ретінде іске қосатын. Егер қосалқы процесс нөлдік кодпен аяқталса, sh «then» сөйлемін іздейтін (жеке сөйлем, бірақ көбінесе нүкте-жоламен бірге жазылған) және осы ішкі блокты орындайтын. Әйтпесе, «else» бөлігі орындалатын. «test» бағдарламасын «test» және «[» деп байланыстыру төртбұрышты жақшаларды пайдалануға және «test» функционалдығы sh тілінің бөлігі сияқты көрінуге мүмкіндік берді. sh қабығында басқару блогының соңын белгілеу үшін кері сөздерді қолдану ALGOL 68 тілінен алынған стиль болды. Ал csh өрнекті тікелей бағалай алатын, бұл оны жылдамдатып, оқылымдылығын жақсартты: Оның өрнектері грамматика мен операторлар жиынтығын негізінен C тілінен көшірді, ешқандай кілт сөздері кері бұрылмады және жалпы стиль де C тіліне ұқсас болды. Өрнек грамматикасының болмауына байланысты sh сценарийі команда алмастыру және «expr» командасын пайдаланды. (Қазіргі POSIX қабығында мұндай грамматика бар: бұл операторды былай жазуға болады немесе .) Соңында, үшінші мысал түрлендіру операторларының әртүрлі стильдерін көрсетеді. sh сценарийінде «;;» әрбір жағдайдың соңында қолданылады, өйткені sh басқа жағдайда бос операторларды қабылдамайды.

Интерактивті пайдаланудың жақсартылуы

Екінші мақсат – C қабығының интерактивті қолдану үшін жақсырақ болуы еді. Ол көптеген жаңа мүмкіндіктерді ұсынды, олар терминалда командаларды теру арқылы пайдалануды жеңілдетіп, жылдамдатып, қолдануға ыңғайлы етті. Пайдаланушылар азырақ перне басу арқылы көп нәрсені істей алды және ол жылдам жұмыс істеді. Осы жаңа мүмкіндіктердің ең маңыздылары – тарих және өңдеу механизмдері, псевдонимдер, каталогтар жиынтығы, тильда белгілеуі, cdpath, жұмыс үдерісін басқару және жолдың хэштелуі болды. Бұл жаңа мүмкіндіктер өте танымал болды және олардың көптегені кейіннен басқа Unix қабықшаларында қолданылды.

Тарих

Тарих пайдаланушыларға бірнеше перне соғу арқылы бұрынғы командаларды еске түсіріп, қайта орындауға мүмкіндік береді. Мысалы, екі леп белгісін ("!!") команда ретінде енгізсе, соңғы команда қайта орындалады. Басқа қысқа пернелер комбинациялары, мысалы, "!$" (яғни "өткен команданың соңғы аргументі") бұрынғы командалардың бөліктерін біріктіріп, жаңа команда құруға мүмкіндік береді.

Редакторлар

Өңдеуді тек алдыңғы команданың мәтінінде ғана емес, сонымен қатар айнымалылардың алмастырылуында да жасауға болады. Операторлар қарапайым жол іздеу/ауыстырудан бастап, нақты сегментті алу үшін жол атауын талдауға дейін қолданылады.

Атаулары

Алиастар пайдаланушыға алиас атауын теруге мүмкіндік береді, сонда C қабықшасы оны пайдаланушы анықтаған сөздер жиынтығына ішкі түрде ауыстырады. Көптеген қарапайым жағдайларда алиастар скрипттерге қарағанда жылдам жұмыс істейді және ыңғайлырақ болады.

Каталогтар стегі

Каталогтар стегі пайдаланушыға ағымдағы жұмыс каталогын қосып немесе алып тастауға мүмкіндік береді, бұл файлдық жүйеде әртүрлі жерлерге оңайрақ қайта оралуға көмектеседі.

Тильда белгісі

Тильда белгісі "~" таңбасын қолдану арқылы, үй каталогына қатысты жолдарды қысқаша жазуға болады.

Файл атауының толықтығы

Escape пернесі ағымдағы команда жолының соңында файл атауын толықтыру мүмкіндіктерін көрсету үшін интерактивті түрде қолданылуы мүмкін.

Cdpath (жазу жолы)

Cdpath командасы cd (директорияны өзгерту) үшін іздеу жолының ұғымын кеңейтеді: Егер көрсетілген директория қазіргі директорияда болмаса, csh оны cdpath директорияларында іздейді.

Жұмысты бақылау

1980 жылдардың басында көптеген пайдаланушылар тек бірнеше терезелерді қолдауға мүмкіндік бермейтін қарапайым таңбалық режимдегі терминалдарды ғана қолданды, сондықтан олар бір уақытта тек бір ғана тапсырмамен жұмыс істей алды. C қабығының жұмыс басқару функциясы пайдаланушыға ағымдағы процесті тоқтатуға және ^Z пернесін басу арқылы C қабығының жаңа данасын (жұмысты) құруға мүмкіндік берді. Пайдаланушы fg командасын пайдаланып жұмыстар арасында ауыса алатын болды. Белсенді жұмыс «алдыңғы план» деп аталатын. Басқа жұмыстар тоқтап (кідіріп) тұрған немесе «фоновый план»да жұмыс істеп жатқан делінер еді.

Жолды шектеу

Жолдық хэштеу C қабығының орындалатын файлдарды іздеу жылдамдығын арттырады. Файл табылар немесе іздеу мүмкіндігі аяқталғанша әрбір жол каталогында жеке-жеке файлдық жүйеге шақыру жасаудың орнына, C қабығы жол каталогтарын сканерлеу арқылы құрылған ішкі хэш-кестеге жүгінеді. Бұл кесте көбінесе C қабығына файлды (егер ол болса) іздеусіз қайда табуға болатынын көрсетеді және оны `rehash` командасымен жаңартуға болады.

Тілдің жалпы көрінісі

C қабықшасы бір жолды бір мезгілде өңдейді. Әрбір жол бос орындармен немесе жақшалар, құбырлар, кіріс/шығыс қайта бағыттау операторлары, нүктелермен және амперсандтар сияқты арнайы мағынасы бар басқа да таңбалармен бөлінген сөздер жиынтығына жіктеледі.