Що таке csh і як працювати з цією оболонкою?

Автор: Опубліковано

Коротко: csh, або C shell, — це системна оболонка: програма, яка інтерпретує введені команди й запускає інші програми в Unix та споріднених системах. Вона дає змогу працювати інтерактивно й виконувати скрипти, а її синтаксис частково нагадує мову C. Її можна зустріти в старіших середовищах, технічних інструментах та наявних скриптах; для нового адміністративного скрипту зазвичай практичніше обрати Bash або sh.

Для чого потрібна csh і чим вона відрізняється від термінала?

Термінал — це текстовий інтерфейс, у якому ви вводите команди й читаєте результати. Оболонка працює всередині цього середовища: читає команди, розгортає скорочені записи, обробляє перенаправлення й запускає програми. Отже, саме відкриття вікна термінала не означає, що ви використовуєте csh: у ньому може працювати Bash, Zsh або інша оболонка.

C shell створили в Каліфорнійському університеті в Berkeley, а її головний розробник — Bill Joy. Назва вказує на подібність деяких керувальних конструкцій до мови C, а не на можливість виконувати код C. Файл із вихідним кодом мовою C не можна запустити через csh як звичайний скрипт.

За допомогою csh можна переходити між каталогами, запускати інструменти, поєднувати їх конвеєрами й спрямовувати результати у файли. Оболонка також підтримує історію команд, псевдоніми — власні скорочення для команд — і керування завданнями, що працюють у фоновому режимі.

Багато простих команд мають однаковий вигляд у різних оболонках. Наприклад, ls запускає програму, яка показує вміст каталогу. Відмінності стають суттєвими під час роботи зі змінними, умовами, циклами та перенаправленням повідомлень про помилки.

Який синтаксис має csh?

У csh звичайну змінну задають командою set, а змінну середовища — командою setenv. Змінна середовища передається програмам, що запускаються, і завдяки цьому може впливати на їхню поведінку.

set nazva = "Ганна"
echo "Вітаю, $nazva"

setenv APP_MODE test

Перша змінна тут використовується для формування повідомлення. Друга передає запущеним програмам значення APP_MODE=test; його вплив залежить від того, чи читає цю змінну конкретна програма.

Приклад циклу csh:

foreach kolir (chervonyi zelenyi synii)
    echo "Колір: $kolir"
end

Цей цикл виведе три рядки. У Bash він не працюватиме без змін, оскільки Bash використовує іншу конструкцію циклу. Так само команда з посібника для Bash, наприклад export APP_MODE=test, не є правильним способом задати змінну середовища в csh.

Не переносьте цілі фрагменти скриптів між оболонками без перевірки синтаксису. Сумісність окремої команди, як-от echo, не означає сумісності всього скрипту.

Як перевірити, чи є csh у системі?

В Unix-подібній системі можна перевірити, чи доступна програма через поточний шлях пошуку команд:

which csh

Якщо ви отримаєте шлях, наприклад /bin/csh, система може знайти команду з цією назвою. Відсутність результату не завжди означає, що програма не встановлена: вона може розташовуватися поза каталогами, у яких оболонка виконує пошук. Доступність інструмента which і вигляд повідомлення також залежать від системи.

Команда echo $SHELL зазвичай показує шлях до оболонки входу — типової оболонки, призначеної користувачеві. Це ненадійний спосіб визначити оболонку, яка працює зараз, оскільки після ручного запуску іншої оболонки значення цієї змінної може залишитися незмінним.

Якщо csh доступна, введення csh запустить додатковий сеанс оболонки. Командою exit ви повернетеся до попереднього. Це простіший спосіб спробувати csh, ніж змінювати типову оболонку облікового запису; інструкцію зі встановлення найкраще шукати в документації конкретної системи.

Csh, tcsh, Bash і sh — що обрати?

tcsh — це розвиток csh, значною мірою сумісний із нею. Вона пропонує розширені можливості інтерактивної роботи, зокрема редагування командного рядка та доповнення назв. У деяких системах команда csh запускає саме tcsh. Тому під час діагностики проблем важлива фактична реалізація, а не лише назва команди.

ОболонкаКоли доречна
cshПідтримка скриптів і середовищ, які потребують синтаксису C shell.
tcshІнтерактивна робота в середовищі, що використовує сімейство csh.
BashНові скрипти, якщо Bash доступна на цільових машинах.
shПереносні скрипти із синтаксисом, сумісним зі стандартом POSIX.

POSIX — це сімейство стандартів, які описують спільні інтерфейси Unix-подібних систем, зокрема поведінку оболонки. Csh не сумісна із синтаксисом оболонки POSIX. Рекомендація використовувати Bash або sh для нових скриптів зумовлена насамперед переносністю та простішим використанням типових інструментів і прикладів для адміністрування, а не тим, що csh не здатна автоматизувати завдання.

Як запустити файл, призначений для csh?

Файл із розширенням .csh зазвичай містить скрипт C shell, але саме розширення не визначає його вмісту. Підказкою є перший рядок, наприклад #!/bin/csh. Це shebang: запис, який указує інтерпретатор для безпосереднього запуску виконуваного файлу.

Переглянувши вміст файлу з надійного джерела, ви можете запустити його, явно вказавши інтерпретатор:

csh skrypt.csh

Такий спосіб не потребує надання файлу права на виконання, але потребує права на читання. Скрипт працює з правами користувача, який його запускає, тому не перевіряйте невідомий файл через sudo.

Якщо інструкція проєкту вимагає csh, спочатку перевірте її доступність і вимоги проєкту. Не замінюйте її автоматично командою bash skrypt.csh: зміна інтерпретатора не перетворює синтаксис скрипту.

Дивіться також: Що відбувається після закінчення терміну дії домену?

Читайте також

Дізнайтеся, як PHP-FPM обробляє запити PHP, чим відрізняється від вебсервера та як налаштувати процеси під трафік і ресурси хостингу.
Дізнайтеся, як BIND обслуговує DNS, чим відрізняються його серверні ролі та коли варто розгортати його самостійно замість керованої послуги.
Дізнайтеся, що означають польський реєстр і номер REGON, чим вони відрізняються від NIP та KRS і як перевірити дані підприємства.