Дивна поведінка терміналу UNIX

Одного разу термінал може почати поводитися дивно, наприклад кожна буква виводиться двічі або жReturn не переміщує курсор на початок наступного рядка Звичайно можна виправити становище, вимкнувши і заново включивши термінал або ж вийшовши з системи і увійшовши знову Можна також прочитати опис команди stty (Set terminal options – завдання установок терміналу) у розділі 1 керівництва (man1) Для правильної обробки знаків табуляції (якщо сам термінал їх не обробляє) введіть команду

$ stty -tabs

і система перетворює символ табуляції в відповідну кількість прогалин Якщо термінал дозволяє встановлювати крок табуляції, то це можна зробити за допомогою команди tabs (Насправді може знадобитися ввести

$ tabs тіп5термінала

для того, щоб все запрацювало (зверніться до опису команди tabs в керівництві)

Помилки введення

Якщо при введенні зроблена помилка і вона виявлена ​​до натискання Return, То існують два способи виправлення:стерти символи один за іншим або весь рядок цілком, а потім набрати її заново1

Якщо вводиться символ стирання рядка (line kill character) (стандартно символ @), то вся рядок буде проігнорована, як ніби вона ніколи і не була введена, і введення буде продовжений з нового рядка:

$ ddtae @ Абсолютно неправильно, починаємо заново

date з нового рядка

Mon  Sep 26   12:23:39  EDT  1983

$

Символ # (знак дієза) стирає останній введений символ кожен новий # стирає ще один символ у напрямку до початку рядка (але не за її межами) Так що помилковий ввід можна виправити сліду ющим чином:

$ dd # atte # # e Виправляємо прямо в процесі введення

Mon  Sep 26   12:24:02  EDT  1983

$

На які саме символи покладено функції стирання символу (забою) і видалення рядка, у великій мірі залежить від системи У багатьох системах (включаючи ту, з якою працюють автори) знак забою замінений на символ повернення на одну позицію (backspace), що зручно для відеотерміналів Можна без праці перевірити, як йдуть справи в конкретній системі:

$ datee7                                                  Перевіримо 7

datee7:  not  found                                      Це не 7

$ datee # Спробуємо # Mon  Sep 26   12:26:08  EDT  1983              Це #

$

(Символ повернення на одну позицію зображений як 7 для більшої наочності) Як символ видалення рядка також часто використовується ctl-u

У даному розділі символ забою буде позначатися як дієз #, оскільки це відображається символ, але памятайте, що ваша система може відрізнятися У розділі Налаштування оточення» буде показано, як

1 Матеріал цього розділу навряд чи має відношення до тих UNIX-системам, з якими матиме справу читач Наведена інформація стосується

«Справжніх» UNIX-систем з «справжніми» терміналами У PC-шних версіях UNIX все простіше і зручніше – Прямуючи науч ред

можна раз і назавжди визначити знаки забою і видалення рядка за бажанням користувача

Що робити, якщо потрібно ввести знак забою або видалення рядка як частина тексту Якщо випередити символи # або @ зворотною косою межею \, вони втратять своє особливе значення Тому, щоб ввести # або @, Наберіть \ # або \ @ Система може перемістити курсор на наступний рядок після прочитання @, навіть якщо перед ним стояла зворотна коса риска Не турбуйтеся, «комерційне at» було записано

Зворотна коса риса, іноді званаescape5сімволом, Широко використовується для вказівки того, що наступний за нею символ має спеціальне значення Щоб стерти зворотну косу риску, треба ввести два символи винятки: \ # # Зрозуміло чому

Символи, що вводяться, перш ніж вони дістануться до місця призначення, розглядаються і інтерпретуються цілим рядом програм, а спосіб їх інтерпретації залежить не тільки від місця призначення, а й від того, яким чином вони туди потрапили

Кожен введений символ негайно відображається на терміналі, якщо тільки луна не виключене, що буває досить рідко Ще не натиснута клавіша Return, Символи тимчасово зберігаються ядром, тому друкарські помилки можна поправити за допомогою символів забою та анулювання рядка Якщо символ забою або видалення рядка передувало зворотною косою межею, то ядро ​​відкидає межу і зберігає після дме символ без інтерпретації

При натисканні клавіші Return збережені символи посилаються в програму, яка займається читанням з терміналу Ця програма, в свою чергу, може інтерпретувати символи спеціальним чином наприклад, оболонка (командний процесор) не сприймає як мають особливе значення символи, перед якими стоїть зворотна коса риска Про це йтиметься у розділі 3 Поки ж запамятайте, що ядро ​​обробляє видалення рядка, забій і зворотну косу риску, тільки якщо риса стоїть перед знаком видалення рядка або забою залишилися ж символи можуть бути особливим чином інтерпретовані іншими програмами

Вправа 11 Поясніть, що станеться з

$ date\@

~

Вправа 12Більшість командних процесорів (на відміну від оболонки UNIX System 7) інтерпретують знак дієза # як початок коментаря і ігнорують весь текст від # до кінця рядка Враховуючи це, поясніть запис, представлену нижче, вважаючи, що # – це знак винятки:

$ date

Mon  Sep 26   12:39:56  EDT  1983

$ #date

Mon  Sep 26   12:40:21  EDT  1983

$ \#date

$ \\#date

#date: not  found

$

~

Джерело: Керниган Б, Пайк Р, UNIX Програмне оточення – Пер з англ – СПб: Символ-Плюс, 2003 – 416 с, Мул

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*