Мікроядерний Операційні Системи

  1. Підстановка імен файлів. шаблони
  2. Підстановка результату виконання
  3. Завершення імен файлів
  4. Засоби редагування командного рядка
  5. Повторення і модифікація раніше введених команд
  6. Робота із завданнями
  7. Мова написання скриптів
  8. Мова sh
  9. Мова csh
  10. Установка запрошення shell
  11. перелік спецсимволов
  12. Розбір командного рядка
  13. Кешування імен виконуваних файлів

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

Наприклад, echo $ TERM виведе на екран значення змінної TERM. Користувач може визначити свої власні змінні. Нова змінна з'являється, як тільки ви даєте команду привласнити значення неіснуючої змінної. Змінна не має типу, так як вважається, що всі змінні мають тип "рядок". При цьому якщо спробувати виконати арифметичну операцію зі змінними, що мають значення деяких чисел, то такий рядок буде перетворена в число, число використано в операції і результат перетворений назад в рядок.

Присвоєння змінній значення у всіх командних процесорах, крім csh, виконується командою

Змінні зі спеціальними назвами типу DISPLAY, TERMINFO і т.п. використовують програми, які перевіряють свою середу оточення на наявність таких змінних і їх значень. Поведінка таких програм може змінюватися в залежності від значення змінних.

Змінні можуть експортуватися, тобто передаватися від процесів-батьків процесам-нащадкам. Для експорту змінної треба дати команду

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

У tcsh є можливість створювати змінні тільки для читання, без права зміни значень: для цього служить команда

Крім цього, в tcsh можна привласнити змінної значення у вигляді списку слів, до яких потім можна звертатися за номером слова, починаючи з 1:

Для виведення на екран списку всіх змінних з їх значеннями треба дати команду set без параметрів.

Зумовлені змінні містяться в середовищі оточення командного процесора незалежно від установок, які може зробити користувач в стартових скриптах. Імена зумовлених змінних середовища оточення у всіх командних процесорах, крім csh (і, в деяких випадках, tcsh) пишуться символами верхнього регістру: PATH, USER, TERM, PS1, PS2.

В іменах змінних середовища оточення використовуються літери латинського алфавіту. Прийнято призначені для користувача, додані по ходу роботи змінні в скриптах називати іменами з символів нижнього регістру для того, щоб відрізняти змінні, введені розробником системи, від тих, що вводить користувач або вимагає прикладна програма.

У будь-яких командних процесорах обов'язково заздалегідь визначені змінні перераховані в таблиці 12.5 .

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

Будь-скрипт може бути викликаний з аргументами, які в скрипті називаються позиційними параметрами. До аргументів з першого по дев'ятий слід звертатися як до $ 1 .. $ 9. Значення $ 0 - це ім'я самого скрипта, за яким його викликали. Один і той же скрипт може бути викликаний з різними іменами, наприклад, якщо з ним встановлені сімволі- етичні зв'язку (symbolic links).

Команда shift n (n - позитивне або негативне зміщення) дозволяє рухати "віконце" $ 1 .. $ 9 по всьому масиву аргументів скрипта вперед і назад, якщо аргументів більше дев'яти. Shift без параметрів еквівалентний shift 1. У csh "вікно" вміє зрушуватися тільки на одну позицію вперед.

Крім вищеописаних змінних зазвичай визначені змінні перераховані в таблиці 12.6

Таблиця 12.6. Мінлива Сенс $ Номер процесу поточного shell'a * Всі позиційні параметри _ Остання викликана команда 1,2, .. 9 Один позиційний параметр $ # Число позиційних параметрів

Підстановка імен файлів. шаблони

При запуску програм з командного рядка часто потрібно передати їм в якості аргументів одне або кілька імен файлів. Часто ці імена зручно задати шаблоном - наприклад, / var / log / messages.?, Що означає "все файли з каталогу / var / log, імена яких починаються на messages., А завершуються будь-яким символом". Будь-командний процесор вміє підставляти в командний рядок імена файлів, що відповідають шаблоном:

ls -l / var / log / messages.?

Символ "?" трактується командним процесором як шаблон, якому відповідав би один будь-який символ.

Зверніть увагу на те, що командний процесор не розуміє регулярних виразів. Його шаблони схожі на регулярні вирази, але це - дві абсолютно різні пісні. Для обробки регулярних виразів в будь-якому додатку використовується стандартна функція regex, а шаблони імен файлів кожен командний процесор обробляє по-своєму.

Командний процесор розпізнає і інтерпретує такі символи в шаблонах (такі символи називаються метасимвол, metasymbols або wildcards).

Таблиця 12.7. Метасимвол Сенс * Будь-яка подстрока, в тому числі порожня. ? Один будь-який символ. [...] Один будь-який символ зі списку (наприклад, [avgf]) або діапазону (наприклад, [az])

Порядок підстановки імен файлів за шаблоном такий: спочатку командний процесор знаходить всі файли, імена яких відповідають шаблону, а потім підставляє імена всіх цих файлів через пробіл в рядок в те місце, де був написаний шаблон.

Стало бути, якщо в поточному каталозі є файли money .c, money .bak, money .obj і wallet .x, то команда

буде розкрита в

ls -l money.c money.bak money.obj

Підстановка результату виконання

Іноді виникає необхідність відшукати в системі файли по якомусь ознакою і з усіма цими файлами виконати однакову дію: наприклад, у всіх файлах *. html замінити подстроку Siemens на Nixdorf. Якщо це потрібно зробити тільки для файлів, що знаходяться в одному каталозі, то завдання вирішується досить просто. Тут ми наведемо приклад скрипта для Bourne Shell, але аналогічний скрипт легко написати і для інших командних процесорів:

for i in * .html do sed 's / Siemens / Nixdorf / g' <$ i> tmp mv tmp $ i done

Мінлива i послідовно приймає значення зі списку, тобто на кожній ітерації циклу вона має різне значення; список буде містити імена всіх файлів поточного каталогу, відповідних шаблоном *. html.

Команда sed забезпечує заміну всіх входжень Siemens на Nixdorf, причому у вхідний потік sed перенаправляється вміст чергового файлу, в залежності від значення змінної i. Результат направляється в файл tmp, а команда mv забезпечує перейменування файлу tmp в потрібне ім'я для заміни старого файлу зі списку *. html новим.

Що робити, якщо таку процедуру треба проробити з усіма файлами *. html всього дерева каталогів, починаючи з поточного каталогу?

В UNIX є унікальна можливість, яка реалізована в будь-якому командному процесорі: можна "вкласти" одну команду в іншу так, щоб спочатку виконалася перша, а потім результат її виконання був підставлений в командний рядок для виклику другої команди.

Отже, ми хочемо знайти всі файли *. html в поддереве файлової системи, починаючи з поточного каталогу.

Використовуємо find для пошуку:

Тепер скористаємося конструкцією "підстановка результату виконання" і перепишемо наш скрипт для заміни подстрок:

for i in `find. -name "* .html" `do sed 's / Siemens / Nixdorf / g' <$ i> tmp mv tmp $ i done

Команда, укладена в `` (зворотні апострофи), виконується першою, а результат її виконання підставляється в командний рядок. Потім командний рядок запускається на виконання.

Завершення імен файлів

Функція "підказки" (можна сказати також - "завершення") імен файлів (file name completion) дозволяє набрати лише частина імені існуючого файлу і потім натиснути клавішу <Tab>. У відповідь на це командний процесор "закінчить" набір імені файлу. Наприклад, якщо треба звернутися до файлу / usr / sadm / admin / bin / printmgr, то досить набрати

/ Usr / sa <Tab> dm / a <Tab> dmin / b <Tab> in / pr <Tab> intmgr

Завершення імен файлів реалізовано тільки в bash і tcsh.

Тим, у чиїй системі є файли з довгими унікальними іменами, підказка імен файлів відмінно економить час.

При подвійному натисканні <Tab> виводяться всі можливі варіанти завершення імені файлу.

Наприклад, якщо в каталозі є два файли, що починаються з літер msg: msg01.txt і msg02.txt і треба переглянути один з них, я набираю more msg <Tab> <Tab>

Командний процесор bash (або tcsh) мені підкаже:

Тепер досить набрати ще цифру 1 або 2, щоб вказати, який саме файл потрібно, і ще раз натиснути <Tab> для остаточного завершення імені. Якщо після подвійного натискання <Tab> bash бачить занадто багато можливих варіантів імен, він запитає:

There are 1102 possibilities. Do you really wish to see them all? (Y or n)

Варто відповісти n: так багато імен не вміститься на екран.

Засоби редагування командного рядка

Редагувати командний рядок доводиться для того, щоб виправити щось в тільки що набраної рядку. У sh не можна пересунути курсор в будь-яку позицію в рядку, в інших командних процесорах - можна. Найзручніше редагувати командний рядок в bash.

У кожному командному процесорі реалізовані стирання останнього символу клавішею <backspace> і стирання рядка цілком комбінацією клавіш <Ctrl -U>.

У найперших реалізаціях командних процесорів засоби редагування були ще більш примітивними (наприклад, видалення всього рядка цілком виконувалося введенням @ і подальшим введенням рядка заново, при цьому всі набрані символи все одно залишалися на екрані). Зараз такі архаїчні прийоми редагування не застосовуються ні в одному командному процесорі.

В bash і tcsh можна переміщатися вперед і назад по вже введеним символам в рядку за допомогою "стрілок", вводити знаки в середину і на початок рядка. Командний процесор bash після натискання Enter приймає всю рядок цілком, незалежно від того, в якій позиції рядка знаходився курсор при натисканні Enter. Наприклад, можна повернути курсор до середини рядка, якщо введення виявився невірним, виправити помилку і тут же натиснути Enter, щоб запустити команду на виконання. У деяких старих версіях командних процесорів в цьому випадку слід виправити рядок, перейти до її кінця для введення команди і тільки після цього натиснути Enter.

У ksh редагування за умовчанням вимкнено, його треба включити натисканням клавіші Esc4. Після цього командний рядок буде редагуватися командами того редактора, ім'я якого задано в змінного оточуючого середовища VISUAL або EDITOR. За замовчуванням це редактор vi. Важко знайти такого системного адміністратора, якому такий громіздкий і незручний спосіб виправлення команд здасться вдалим: адже до всього іншого йому доведеться пам'ятати про переключення режимів редагування рядка введення!

Повторення і модифікація раніше введених команд

Буває зручно повторити команду, яку ви нещодавно вже вводили; особливо це допомагає при введенні довгих команд з однаковими аргументами. Іноді повторювана команда повинна трохи відрізнятися від оригіналу, тоді слід модифікувати запис про раніше введеної команді і запустити на виконання свіжий варіант.

Наприклад, ввівши

lyxn -p proxy.spb.edu:3128 www.macropulos.cam.ac.uk

ви отримуєте у відповідь "command not found", тому що ви збиралися запустити lynx, але допустили помилку в імені програми. Чи не повторювати ж тепер введення всієї довжини рядка! Якби помилка була в кінці рядка, можна було б викликати рядок з попередньою командою клав- шей "стрілка вгору", але тут помилка на початку рядка, і після виклику виконаної рядки доведеться ще рухати курсор в її початок. Є більш короткий варіант, доступний в csh, tcsh і bash:

Ця конструкція вимагає у командного процесора повторити попередню команду, замінивши першої входження підрядка xn на nx. І це все!

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

  • ! N (n - число) - повтор n-ної команди з історії команд5
  • !! - повтор останньої команди
  • ! Str - викликає виконання останньої команди, що починається на str

Командні процесори csh і tcsh по-різному інтерпретують конструкцію! Nstr, наприклад, `! 67r '. Для csh це - команда номер 67, в кінець якої додається r перед виконанням, а для tcsh це - остання починається на 67r команда. Такий синтаксис введений в tsch для зручності повторення команд, чиї імена починаються з цифр. Щоб змусити tcsh поводитися подібно csh, потрібно перед числом поставити зворотний слеш, екранує його спеціальне значення: `! \ 6 \ 7r '.

В bash повторення команд виконується так само, як і в csh. Додатково можна використовувати клавіші "вгору" і "вниз" для переходів між командами, введеними раніше або пізніше.

У ksh для повторення команд використовують вбудовану команду r, а в sh - команду fc, при цьому в sh можна викликати тільки таку команду, яка була введена в поточному сеансі, тому що sh не веде файл історії.

Крім цього, в bash можна викликати вбудований інтерактивний пошук в історії команд, натиснувши <Ctrl -R> і потім ввівши подстроку для пошуку; знайдена команда відобразиться автоматично.

Робота із завданнями

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

Завдання можна призупинити, вимагати його продовження або завершити його. Завдання може виконуватися як у фоновому режимі, так і в інтерактивному. Для управління завданнями більшість командних процесорів (точніше, все крім Bourne Shell) мають вбудовані команди: jobs, fg, bg.

Подивитися список запущених раніше завдань можна за допомогою команди jobs. Для виведення ідентифікаторів (PID) процесів, що входять в завдання, слід використовувати команду

Наприклад, запускаємо програму find для пошуку файлів *. gif, список знайдених файлів перенаправляємо в ~ / gifs (тобто наш домашній каталог, файл gifs):

find / -name "* .gif"> ~ / gifs & [1] 33151 jobs -l [1] + 33151 Running find / -name "" .giff "> ~ / gifs &

Те, що зазначено в квадратних дужках [], і є номер завдання. Завдання мають унікальні номери в межах поточного сеансу роботи з shell 'ом. Завдання можна перевести в інтерактивний режим командою fg (foreground):

fg% 1 #% 1 - номер завдання

Тепер завдання виконується в інтерактивному режимі. Можна зупинити його, перевівши в режим suspend (sleeping, сплячий):

<Сtrl-z> [1] + Stopped find / -name "" .giff "> ~ / gifs

Тепер можна продовжити виконання завдання в тлі командою bg (background):

За допомогою команд управління завданнями можна перемикати програми між інтерактивним і фоновим режимом виконання. Якщо ви випадково забули поставити знак & наприкінці команди, але збиралися запустити її у фоновому режимі, ще не все втрачено! Слід натиснути Ctrl -Z, щоб "приспати" програму, а потім запустити завдання у фоновому режимі за допомогою команди bg.

Аргументи команд bg і fg в різних командних процесорах можуть виглядати по-різному. Однак, знак відсотка%, за яким вказується номер завдання, все командні процесори інтерпретують однаково: як посилання на номер завдання.

Мова написання скриптів

Існує всього два типи мов, які використовуються в командних процесорах. Це sh -подібний мову і csh -подібний мову. Перший тип підтримується в sh, ksh, bash. Другий - в csh і tcsh. Мова sh більш зручний і стандартний, на ньому написано практично всі скрипти в усіх системах UNIX, включаючи стартові скрипти системи. Мова csh по синтаксису ближче до мови програмування С, але використовується для скриптів рідше. Однак, в деяких випадках програмне забезпечення включає в себе скрипти на мові csh, тому тут ми розберемо коротко конструкції обох мов.

Першим рядком будь-якого скрипта повинна бути рядок, що містить керуючий коментар спеціального виду:

#! Полное_імя_командного процесора

наприклад

Цей коментар вимагає виконати скрипт за допомогою вказаного командного процесора. За замовчуванням скрипт виконується в середовищі / bin / sh, навіть якщо він запущений в середовищі іншого командного процесора. Якщо ви працюєте в tcsh і бажаєте, щоб ваші скрипти запускалися в tcsh, слід обов'язково вказати повний шлях до tcsh в керуючому коментарі.

Мова sh

У мові sh існують оператори розгалуження і циклів. Нижче подано опис цих операторів. У ньому жирним шрифтом виділені ключові слова. Конструкція "команди" має на увазі одну або кілька команд командного процесора або викликів програм, які відділяються одна від одної роздільниками (крапкою з комою або перекладом рядка). При введенні багаторядкових операторів в командному рядку командний процесор починає новий рядок запрошенням "продовження команди" (його вид визначається значенням змінного оточуючого середовища PS2 або prompt2).

В операторах циклів допустимі команди break (переривання циклу, управління передається за кінець циклу) і continue (передача управління на початок циклу, перехід до наступної ітерації). Ці команди діють однаково в будь-яких командних процесорах, так як вони будуть реалізовані і в мові sh, і в мові csh.

Оператор розгалуження if:

if умова then команди else команди fi

В bash, ksh і нових версіях sh можлива конструкція elseif (вкладене розгалуження):

if умова then команди elseif умова then команди fi else команди fi case значеніе_переменной of значення1) команди; break; значення2) команди; break; значеніє3) команди; break; *) Команди; esac

Знак "зірочка" (*) означає "всі інші значення", тобто якщо значення змінної не дорівнює ні значенію1, ні значенію2, ні значенію3.

Оператори циклу while (виконувати, поки умова істинна) і until (виконувати до тих пір, поки умова стане справжнім):

while умова do команди done until умова do команди done

Всі ці оператори містять невід'ємний елемент, позначений нами умову. Це - будь-яка команда (в тому числі інший скрипт або конвеєр), яка повертає код завершення.

Умова вважається дійсним, якщо код завершення дорівнює нулю, і хибним - якщо код завершення не дорівнює нулю. Будь-яка команда в UNIX повертає код завершення, нульовий - в разі успішного виконання і ненульовий - в іншому випадку. Значення кодів завершення програм можна з'ясувати за допомогою керівництва до них, наприклад, man.

Для перевірки умов, що відносяться до об'єктів файлової системи, є програма test. У деяких командних інтерпретаторів є вбудована команда test, в інших системах test - це окрема програма. За допомогою test часто перевіряється наявність файлу або каталогу в файлової системі:

if test -e имя_файла then echo "файл існує!"

Мова sh допускає конструкцію [] замість команди test:

if [-e имя_файла] then echo "файл існує!"

Ця конструкція еквівалентна вищенаведеної.

За допомогою test і [] можна перевіряти різні умови, повний список яких можна почерпнути з man test або man sh, man bash.

Деякі програми завжди повертають код завершення нуль. Це легко використовувати для організації нескінченних циклів. Такі цикли можуть знадобитися для перезапуску процесів, що мають тенденцію до несподіваного і непотрібного завершення. Наприклад, так можна запускати процес pppd для з'єднання з провайдером по виділеній або комутованій лінії:

while sleep 10 do / usr / sbin / pppd done

Програма sleep завжди буде повертати нуль, так що цикл ніколи не перерветься і буде справно запускати pppd щоразу, як тільки він завершиться, наприклад, через помилку зв'язку. Десять секунд очікування додані просто для того, щоб був час перечекати несприятливу ситуацію, через яку сталася помилка.

У Solaris і інших системах System V таке застосування менш корисно, ніж в BSD-системи, так як того ж ефекту можна домогтися, написавши виклик pppd в / etc / inittab із зазначенням режиму запуску respawn (запустити, якщо завершиться).

Оператор for (цикл повторюється для кожного значення зі списку):

for ім'я_змінної in список do команди done

Оператор циклу for використовується особливо часто, наприклад, для однотипної модифікації декількох файлів відразу. Припустимо, треба в усіх файлах *. html в поточному каталозі змінити посилання на файл з фотографією:

for i in * .html do sed 's / otello.gif / dezdemona.gif / g' <$ i> tmp mv -f tmp $ i done

Оскільки sed не змінює файл, а лише видає змінений текст в свій вихідний потік, доводиться перенаправляти висновок у тимчасовий файл tmp (назвіть ваш за смаком, від назви нічого не залежить) і потім перейменувати tmp в файл з тим же ім'ям, що у вихідного файлу . У момент перейменування старий файл, природно, зникне.

При виклику sed: слід писати саме $ i, а не просто i, щоб командний процесор підставив в командний рядок значення змінної i, а не символ i.

Відразу перенаправити висновок в файл, ім'я якого вказується як $ i, не можна, оскільки перенаправлення виведення в існуючий файл викличе знищення його колишнього вмісту. Це означає, що одночасне перенаправлення вводу і виводу з / в один і той же файл неприпустимо.

Програмі mv дається ключ -f, який вимагає від неї виконати роботу, не ставлячи питань типу "а Ви дійсно хочете знищити файл?"

Для виведення інформації в sh прийнято використовувати команду echo. Ця команда друкує в стандартний вихідний потік свої аргументи, а в кінці виведення виконує переклад рядка.

команда

виводить рядок і не додає новий рядок в кінці.

Для введення інформації в скриптах на мові sh використовують оператор read:

read name echo "Name is $ name"

Мова, реалізований у вашому командному процесорі, може бути багатшими, ніж описаний тут мінімальний стандарт. Для отримання додаткової інформації зверніться до man на вашу командному процесору

Мова csh

В операторах циклів мови csh можна використовувати команди break (переривання циклу, управління передається за кінець циклу) і continue (передача управління на початок циклу, перехід до наступної ітерації) так само, як і в мові sh.

Мови sh і csh відрізняються синтаксисом операторів і деякими командами. Пам'ятайте, что:

  • в csh імена системних змінних середовища оточення пишуться літерами нижнього регістру;
  • в csh немає оператора until; майже всі оператори називаються інакше, ніж в sh.

У csh і tcsh є свої правила обчислення логічних виразів, щоб з'ясувати істинність або хибність умови в операторах циклу і розгалуження. Команда test є в будь-якій мові, незалежно від командного процесора.

if (умова) команда

або

if (умова) then команди else if (умова) then команди else команди endif

Допускається будь-яке число вкладених операторів elseif, при цьому потрібен тільки один оператор endif.

Відступи в операторі розгалуження не важливі, але оператори else і endif повинні починатися з нового рядка, оператор if повинен слідувати за else або починатися з нового рядка.

Оператор множинного розгалуження в csh називається switch:

switch (рядок) case рядок1: команди breaksw case строка2: команди breaksw default: команди breaksw endsw

Опреатора switch в csh виконується подібно оператору switch з мови С, команда breaksw передає управління за оператор endsw.

Оператор while діє так само, як while в sh, проте синтаксис у нього трохи інший:

while (умова) команди end

Оператор циклу for в csh назвали foreach, Подібно до однойменного оператору з Perl:

foreach ім'я_змінної (список) команди end

Якщо оператор foreach вводиться в командному рядку, то csh на кожній новій рядку виводить запрошення "foreach?". Це означає, що введення оператора ще не закінчений і його можна продовжувати, введення завершується фінальним словом end на початку рядка.

Для введення інформації в скриптах на мові sh використовують конструкцію $ <(підстановка рядки з вхідного потоку):

echo "Enter your name:" setenv name $ <echo "Name is $ name"

Установка запрошення shell

Командний інтерпретатор має кілька варіантів запрошень на різні випадки життя.

За замовчуванням в sh - це $, в csh -%. Привілейований користувач (root) має інше запрошення - #.

У середовищі оточення кожного командного процесора є змінні PS1 і PS2. Це - вид звичайного запрошення і запрошення до продовження введення команди відповідно.

При введенні довгою команди можна набрати її в два рядки, для цього слід в кінці першого рядка набрати символ зворотного слеша і натиснути Enter - ось так:

і продовжити введення на наступному рядку. Команда може бути і ще більш многострочной; як правило, допустима довжина команди складає 1024 символів. Зворотний слеш екранує наступний за ним символ перекладу рядка від інтерпретації як символ завершення команди. При переході до нового рядка з'явиться символ>, так як саме це значення за замовчуванням має PS2.

У csh і tcsh замість PS1 і PS2 визначені змінні prompt і prompt2. Деякі командні процесори, зокрема, ksh, мають додаткові запрошення для спеціальних випадків. Вони зберігаються в змінних PS3, PS4 і т.д., а в csh - в prompt3 і prompt4.

Багато реалізації командних процесорів (перш за все, bash) вміє показувати запрошення, що включають в себе динамічно підставляються частини (наприклад, ім'я поточного каталогу). У цих командних процесорах є свої власні макроозначення для таких підстановок. Наприклад, ім'я поточного каталогу в bash підставляється в запрошення командного рядка за допомогою макросу \ w, а в csh -% /. Пам'ятайте, що призначати бажане значення змінної можна, тільки вказуючи макрос всередині апострофів, щоб екранувати його від інтерпретації командним процесором, наприклад, в bash:

Перелік макроозначень для запрошень командного рядка зазвичай міститься в керівництві man по командному інтерпретатору.

перелік спецсимволов

Як ви вже знаєте, все командні процесори сприймають деякі символи як службові, надаючи їм спеціальне значення при розборі командного рядка. Вище розглядалися спецсимволи, пов'язані із зазначенням конкретних конструкцій. Вже було показано, що багато службові символи інтерпретуються різними командними процесорами однаково, хоча деякі - по-різному. Основні спецсимволи наведені в табл. 12.8 .

Таблиця 12.8. Спеціальні символи shell'ов Командний процесор Основні спецсимволи sh $ *? \ ` '" [] &lt;> & Csh $ *? \ `'"! ^ {} []! % &lt;> & Ksh $ *? \ ` '"! ^ {} []! &lt;> & Bash $ *? \ `'"! ^ {} []! % <> &

Щоб ввести спеціальні символи без урахування їх особливого значення (наприклад, для обчислення добутку двох чисел виконується команда expr 2 \ * 2, треба передати програмі expr просто зірочку, що не розшифровуючи її спеціальне значення для командного процесора) в командному рядку передують їм символом екранування \ або укладайте в лапки або апострофи. Лапки відрізняються від апострофів тим, що екранують від інтерпретації все спеціальні символи, за винятком `, $ і \, а апострофи екранують абсолютно всі спеціальні символи.

Розбір командного рядка

Кожен командний процесор виконує розбір командного рядка строго в наступному порядку:

  • визначення команд і їх аргументів;
  • підстановка псевдонімів (певних командою alias);
  • підстановка імен файлів згідно шаблонами;
  • підстановка результату виконання команди, якщо є конструкція ``;
  • запуск програм і передача їм змінних середовища оточення і аргументів.

Кешування імен виконуваних файлів

Командні процесори csh і tcsh кешують в відразу після початку роботи список виконуваних файлів з каталогів, зазначених у змінній path, тому при зміні значення цієї змінної або при додаванні нових виконуваних файлів в зазначені в ній каталоги слід виконувати команду rehash, щоб командний процесор виявив нові каталоги і команди. Без цієї команди нові програми будуть недоступні, їх доведеться викликати по повному імені файлу.


Чи знаєте Ви,

що cогласно релятивістської міфології "гравітаційне лінзування - це фізичне явище, пов'язане з відхиленням променів світла в поле тяжіння. Гравітаційні лінзи обясняется освіту кратних зображень одного і того ж астрономічного об'єкта (квазарів, галактик), коли на промінь зору від джерела до спостерігачеві потрапляє інша галактика або скупчення галактик (власне лінза). У деяких зображеннях відбувається посилення яскравості оригінального джерела. " (Релятивісти наводять приклади спотворення зображень галактик в якості підтвердження ОТО - впливу гравітації на світло)
При цьому вони забувають, що поле дії ефекту ОТО - це малі кути поблизу поверхні зірок, де насправді цей ефект не спостерігається (затемнювані подвійні). Різниця в шкалах явищ реального спотворення зображень галактик і міфічного відхилення поблизу зірок - 1011 разів. Наведу аналогію. Можна говорити про вплив поверхневого натягу на форму крапель, але не можна серйозно говорити про силу поверхневого натягу, як про причину океанських припливів.
Ефірна фізика знаходить відповідь на спостережуване явище спотворення зображень галактик. Це результат нагріву ефіру поблизу галактик, зміни його щільності і, отже, зміни швидкості світла на галактичних відстанях внаслідок заломлення світла в ефірі різної щільності. Підтвердженням термічної природи спотворення зображень галактик є прямий зв'язок цього спотворення з радіовипромінюванням простору, тобто ефіру в цьому місці, зміщення спектра CMB (космічне мікрохвильове випромінювання) в даному напрямку в високочастотну область. Детальніше читайте в FAQ по ефірної фізіці . НОВИНИ ФОРУМУ що cогласно релятивістської міфології гравітаційне лінзування - це фізичне явище, пов'язане з відхиленням променів світла в поле тяжіння
Лицарі Теорії ефіру 13.06.2019 - 5:11: ЕКОЛОГІЯ - Ecology -> ПРОБЛЕМА ГЛОБАЛЬНОЇ ЗАГІБЕЛІ бджіл ТА других запилювачів РОСЛИН - Карім_Хайдаров.
12.06.2019 - 9:05: ВІЙНА, ПОЛІТИКА І НАУКА - War, Politics and Science -> Проблема державного тероризму - Карім_Хайдаров.
11.06.2019 - 18:05: ЕКСПЕРИМЕНТАЛЬНА ФІЗИКА - Experimental Physics -> Експеримент Серлі и его послідовніків з магнітамі - Карім_Хайдаров.
11.06.2019 - 18:03: ВИХОВАННЯ, ОСВІТА, ОСВІТА - Upbringing, Inlightening, Education -> Просвітніцтво від Андрія Маклакова - Карім_Хайдаров.
11.06.2019 - 13:23: ВИХОВАННЯ, ОСВІТА, ОСВІТА - Upbringing, Inlightening, Education -> Просвітніцтво від В'ячеслава Осієвського - Карім_Хайдаров.
11.06.2019 - 13:18: ВИХОВАННЯ, ОСВІТА, ОСВІТА - Upbringing, Inlightening, Education -> Просвітніцтво від Світлани Віслобоковой - Карім_Хайдаров.
11.06.2019 - 6:28: Астрофізікі - Astrophysics -> До 110 річчя Тунгуска катастрофи - Карім_Хайдаров.
10.06.2019 - 21:23: ВИХОВАННЯ, ОСВІТА, ОСВІТА - Upbringing, Inlightening, Education -> Просвітніцтво від Володимира Васильовича Квачкова - Карім_Хайдаров.
10.06.2019 - 19:27: СОВІСТЬ - Conscience -> Вищий розум - Карім_Хайдаров.
10.06.2019 - 19:24: ВІЙНА, ПОЛІТИКА І НАУКА - War, Politics and Science -> ЗА НАМИ страви - Карім_Хайдаров.
10.06.2019 - 19:14: СОВІСТЬ - Conscience -> російський СВІТ - Карім_Хайдаров.
10.06.2019 - 8:40: ЕКОНОМІКА І ФІНАНСИ - Economy and Finances -> КОЛЛАПС Світової Фінансової СИСТЕМИ - Карім_Хайдаров.

Символ "?
Html всього дерева каталогів, починаючи з поточного каталогу?
Do you really wish to see them all?
Програмі mv дається ключ -f, який вимагає від неї виконати роботу, не ставлячи питань типу "а Ви дійсно хочете знищити файл?
12.8. Спеціальні символи shell'ов Командний процесор Основні спецсимволи sh $ *?
Lt;> & Csh $ *?
Lt;> & Ksh $ *?
Lt;> & Bash $ *?

Дополнительная информация

rss
Карта