При интерактивной работе с системой пользователь постоянно
сталкивается с необходимостью отдавать ей команды. В CDE это можно
делать, выбирая мышью требуемые пункты меню. В текстовом окне или
текстовом режиме команды набираются вручную в Enter производится интерпретация и синтаксический анализ
команды (то есть определяется, где - имя программы, где - ключи, где
- аргументы, где -
В UNIX эту работу выполняет программа, которая называется
Существует несколько широко распространенных , csh или bash.
Первый в мире UNIX
С-shell был разработан студентом Университета в Беркли (University of
California Berkeley) Биллом Джоем (Bill Joy), который по окончании
Berkeley основал компанию Sun Microsystems. Еще Билл Джой написал
самый известный в UNIX редактор vi и был одним из авторов первой
версии BSD UNIX.
| Название | Имя в системе | Плюсы | Минусы |
|---|---|---|---|
| Bourne Shell | sh |
обладает легким и удобным языком скриптов, прост и понятен | мало средств редактирования введенных ранее команд, нет возможности управления заданиями |
| C Shell | csh |
есть управление заданиями и приемлемое редактирование введенных ранее команд | сложный язык скриптов, некоторые версии содержат много ошибок |
| Korn Shell | |
совместим с sh по командам и содержит ряд возможностей csh, имеет средства редактирования команд, введенных ранее (history) |
редактировать команды неудобно, язык скриптов так развит, что все трудно запомнить |
| Bourne Again Shell | bash |
похож на по возможностям,
имеет легкий удобный интерфейс, простое интуитивно ясное редактирование введенных ранее команд, стандарт
де-факто в Linux, в Solaris 9 устанавливается по умолчанию, но не является командным процессором по умолчанию |
пока не обнаружено |
В конце 1970-х годов был написан tcsh - расширение csh, совместимое с
ним по командам, макроопределениям и синтаксису tcsh в Университете Карнеги-Мелон
(Carnegie-Mellon University), а продолжил ее Пол Плэйсвэй (Paul
Placeway) в восьмидесятые годы в Университете Огайо (Ohio State).
Основные отличия tcsh от csh сводятся к усовершенствованию csh обычно является символической
ссылкой на tcsh, а оригинальный csh в поставку не включается, чтобы
не шокировать пользователей пещерным уровнем
В Solaris по умолчанию устанавливаются несколько sh, csh, tcsh, bash и другие; sh.
Некоторые
| Функция | sh | csh | tcsh | bash | |
| History | Нет | Да | Да | Да | Да |
| Псевдонимы | Нет | Да | Да | Да | Да |
| Скрипты | Да | Да | Да | Да | Да |
| Подстановка и завершение имен файлов | Нет | Да* | Да | Да* | Да |
| Нет | Да | Да | Да* | Да | |
| Управление заданиями | Нет | Да | Да | Да | Да |
* - по умолчанию выключено
sh и хотите получить
более удобные средства bash. Тогда вы просто набираете команду
bash
и оказываетесь в среде bash, запущенного по
этой команде. При этом обычно меняется вид приглашения
Каждый /etc, индивидуальные - в
домашнем каталоге пользователя. Если /etc, затем - индивидуальный, из
домашнего каталога. Login-файлы - это тоже стартовые файлы
Некоторые
| shell | стартовые файлы | login-файлы |
sh |
/etc/profile, ~/.profile |
|
csh |
/etc/csh.cshrc, ~/.cshrc |
/etc/csh.login, ~/.login |
|
/etc/profile, ~/.profile |
|
bash |
~/.bashrc |
/etc/profile, ~/.bash_profile, ~/.profile |
Другие
bash, в отличие от других, использует более
сложный алгоритм выполнения стартовых и login-файлов. Если он запущен
как login shell, то он выполняет /etc/profile, если такой файл есть.
Затем делается попытка выполнить ~/.bash_profile. Если такого файла
нет, bash пытается выполнить файл ~/.bash_login, а если нет и такого
файла, то выполняется ~/.profile. Если bash запущен не как login
shell, то при старте он выполняет только файл ~/.bashrc. Если же bash
был запущен как sh (т.е. sh является символьной ссылкой на bash ), то
при старте он ведет себя так же, как и sh.
Все sh, csh, tcsh он называется ~/.history, в bash - ~/.bash_history, в - ~/.shhistory, а в
бесплатной версии Korn Shell (
Многие
Имейте в виду, что по умолчанию файл истории команд может быть
доступен для чтения не только тому, кто вводил команды, но и другим
пользователям. Чтобы не сделать систему уязвимой, следует избегать
ввода каких бы то ни было паролей в lynx или программу доступа к серверу баз
данных mysql, указывая пароль в
lynx ftp://user:password@URL mysql -u root -p password
Так как эти команды сохранятся в файле истории вместе с другими,
кто-то потом сможет прочесть их и узнать какие-то из ваших паролей.
Файл истории команд ограничен по размеру. По умолчанию, bash хранит
500 команд, tcsh - 1000, csh - 100, sh - в зависимости от версии.
Часто sh не создает файл .history вовсе, и дает доступ только к
командам, которые были введены в течение текущего сеанса работы с
ним. Можно изменить число хранимых команд, указав иное значение
переменной, в которой оно хранится.
| shell | переменная | значение по уполчанию |
sh |
HISTSIZE |
не определено |
csh |
history |
100 |
|
HISTSIZE |
128 |
bash |
HISTFILESIZE |
500 |
Псевдонимы - это сокращения для часто используемых длинных команд или их последовательностей. Если вы часто делаете однотипные опечатки при вводе команд, можно создать такие псевдонимы, чтобы команда с опечаткой была псевдонимом правильной команды, например:
alias telent telnet
Создать псевдоним очень просто:
alias псевдоним команда
Команда может быть последовательностью команд с ключами и аргументами, тогда ее следует заключить в апострофы:
alias ll 'ls -l'
Такая команда приведет к тому, что каждый раз при вводе ll
ls -l
Синтаксис определения псевдонимов в разных
Синтаксис команд alias:
командный процессор команда alias ключ для экспорта sh alias ll='ls -l' csh alias ll 'ls -l' ksh alias ll='ls -l' -x bash alias ll='ls -l'
Так же, как и переменные alias. Команда alias является встроенной
командой
Отмена назначенного псевдонима выполняется командой
unalias псевдоним
Как отмечалось в лекции 7, каждый процесс имеет свою
$имя_переменной
Например, echo $TERM выведет на экран значение переменной TERM.
Пользователь может определить свои собственные переменные. Новая
переменная появляется, как только вы даете команду присвоить значение
несуществующей переменной. Переменная не имеет типа, так как
считается, что все переменные имеют тип "строка". При этом если
попытаться выполнить арифметическую операцию с переменными, имеющими
значение неких чисел, то такая строка будет преобразована в число,
число использовано в операции и результат преобразован обратно в
строку.
Попробуйте:
i=2 j=3 expr $i \* $j
Присвоение переменной значения во всех csh, выполняется командой
VAR=value
В csh команда иная:
set VAR=value
или
setenv VAR value
Переменные со специальными названиями типа DISPLAY, TERMINFO и т.п.
используют программы, которые проверяют свою
Переменные могут экспортироваться, т.е. передаваться от процессов-родителей процессам-потомкам. Для экспорта переменной надо дать команду
export имя_переменной
Если надо удалить переменную .
В tcsh есть возможность создавать переменные только для чтения, без
права изменения значений, для этого служит команда
set -r имя=значение
Кроме того, в tcsh можно присвоить переменной значение в виде списка
слов, к которым потом можно обращаться по номеру слова, начиная с 1:
set var=(hello world)
echo {$var[1]}
hello
echo {$var[2]}
world
Для вывода на экран списка всех переменных с их значениями надо дать
команду set без параметров.
Предопределенные переменные содержатся в csh (и, в
некоторых случаях, tcsh ), пишутся символами верхнего регистра: PATH, USER, TERM, PS1, PS2.
В именах переменных
В любых
| Переменная | Смысл |
|---|---|
| HOME | домашний каталог пользователя |
| SHELL | текущий shell |
| PS1 | вид приглашения shell'a |
| PS2 | вид приглашения "продолжение команды" |
| TERM | тип терминала пользователя |
| USER или LOGNAME | имя пользователя |
| PATH | список каталогов, в которых надо искать исполняемый файл, когда пользователь запускает программу, указывая только ее имя, но не путь. Каталоги разделяются двоеточиями |
С другой стороны, многие другие переменные определяются не во всех
set
Любой скрипт может быть вызван с аргументами, которые в скрипте
называются позиционными параметрами. К аргументам с первого по
девятый следует обращаться как к $1..$9. Значение $0 - это имя самого
скрипта, по которому его вызвали. Один и тот же скрипт может быть
вызван с разными именами, например, если с ним установлены
символические связи (
Команда shift n ( n - положительное или отрицательное смещение)
позволяет двигать "окошко" $1..$9 по всему массиву аргументов скрипта
вперед и назад, если аргуменов больше девяти. Shift без параметров
эквивалентен shift 1. В csh shift умеет сдвигать "окно" только на
одну позицию вперед.
Кроме вышеописанных переменных обычно определены следующие:
| Переменная | Смысл |
|---|---|
| $ | номер процесса текущего shell'a |
| * | все позиционные параметры |
| _ | последняя вызванная команда |
| 1,2,..9 | один позиционный параметр |
| ? | число позиционных параметров |
При запуске программ из /var/log/messages.?, что означает
все файлы из каталога /var/log, имена которых начинаются на messages., а завершаются любым символом. Любой
ls -l /var/log/messages.?
Символ "?" трактуется
Обратите внимание на то, что regex, а шаблоны
имен файлов
* |
любая подстрока, в том числе пустая. |
| ? | один любой символ. |
| [...] | один любой символ из списка (например, [avgf] ) или диапазона
(например, [a-z] ). |
Порядок подстановки имен файлов по шаблону таков: вначале
Таким образом, если в текущем каталоге есть файлы money.c, money., money.obj и , то команда
ls -l mon*
будет раскрыта в
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 для поиска:
find . -name "*.html"
Теперь воспользуемся конструкцией "
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 ) подскажет:
msg01.txt msg02.txt
Теперь достаточно набрать цифру 1 или 2, чтобы указать, какой именно
файл требуется, и еще раз нажать "Tab" для окончательного завершения
имени. Если после двойного нажатия "Tab" bash видит слишком много
возможных вариантов имен, он спросит
There are 1102 possibilities. Do you really wish to see them all? (y or n)
Стоит ответить n: так много имен не уместится на экран.
Редактировать sh нельзя передвинуть курсор
в любую позицию в строке, в остальных bash.
В каждом
В самых первых реализациях @ и последующим вводом строки
заново, при этом все набранные символы все равно оставались на
экране). Сейчас такие архаические приемы
В bash и tcsh можно перемещаться вперед и назад по уже введенным
символам в строке с помощью "стрелок", переместить курсор в середину
и в начало строки. bash после нажатия Enter
принимает всю строку целиком, независимо от того, в какой позиции
строки находился курсор при нажатии Enter. Например, можно вернуть
курсор к середине строки, если ввод оказался неверным, исправить
ошибку и тут же нажать Enter, чтобы запустить команду на выполнение.
В некоторых старых версиях Enter.
В Esc. После этого VISUAL или EDITOR. По умолчанию это
редактор vi. Трудно найти такого системного администратора, которому
такой громоздкий и неудобный способ исправления команд покажется
удачным: ведь ко всему прочему ему придется помнить о переключении
режимов
В csh и tcsh bash.
Иногда бывает удобно повторить команду, которую вы недавно уже вводили; особенно это помогает при вводе длинных команд с одинаковыми аргументами. В тех случаях, когда повторяемая команда должна немного отличаться от оригинала, следует модифицировать запись о ранее введенной команде и запустить на выполнение свежий вариант.
Например, введя
lyxn -p proxy.spb.edu:3128 www.macropulos.cam.ac.uk
вы получите в ответ "command not found", потому что, собираясь
запустить lynx, вы допустили опечатку в имени программы. Не повторять
же теперь ввод всей длинной строки! Если бы опечатка была в конце
строки, можно было бы вызвать строку с предыдущей командой клавишей
"стрелка вверх", но здесь опечатка в начале строки, и после вызова
выполненной строчки придется еще двигать курсор в ее начало. Есть
более короткий вариант, доступный в csh, tcsh и bash:
^xn^nx
Эта конструкция требует у xn на nx. И это все!
В csh, tcsh, bash есть и другие средства модификации
!n ( n - число) повтор n-ной команды из history. Используйте tail для просмотра нескольких последних команд: history | tail !! повтор последней команды;!str выполнение последней команды, начинающейся на str.csh и tcsh по-разному интерпретируют конструкцию !nstr, например, `!67r'. Для csh это - команда номер 67, в конец
которой добавляется r перед выполнением, а для tcsh это - последняя
начинающаяся на 67r команда. Такой синтаксис введен в tcsh для
удобства повторения команд, имена которых начинаются с цифр. Чтобы
заставить tcsh вести себя подобно csh, нужно перед числом поставить
обратный слэш, экранирующий его специальное значение: `!\6\7r'.
В bash повторение команд выполняется так же, как и в csh.
Дополнительно можно использовать клавиши "вверх" и "вниз" для
переходов между командами, введенными раньше или позже.
В для повторения команд используют встроенную команду r, а в sh -
команду fc, при этом в sh можно вызвать только такую команду, которая
была введена в текущем сеансе, потому что sh не ведет файл истории.
jobs, fg, bg.
Посмотреть список запущенных ранее jobs. Для вывода идентификаторов (PID) процессов, входящих в
jobs -l
Например, запускаем программу find для поиска файлов *.gif, список
найденных файлов перенаправляем в ~/gifs (т.е. наш домашний каталог,
файл gifs ):
find / -name "*.gif" > ~/gifs [1] 33151 jobs -l [1] + 33151 Running find / -name "*.gif" > ~/gifs
То, что в квадратных скобках [ ], и есть номер fg
(foreground):
fg %1 # %1 - номер задания.
Теперь
<Сtrl-z> [1] + Stopped find / -name "*.gif" > ~/gifs
Теперь можно продолжить выполнение bg (background):
bg %1
С помощью команд управления в конце команды, но собирались запустить ее в
фоновом режиме, еще не все потеряно! Следует нажать Ctrl-Z, чтобы
"усыпить" программу, а затем запустить bg.
Команды bg и fg могут принимать разные аргументы, но знак %, за
которым следует число, в любом
В sh -подобный csh -подобный sh, , bash. Второй - в csh и tcsh. sh более удобен и стандартен,
на нем написаны практически все скрипты во всех системах UNIX,
включая стартовые скрипты системы. csh по синтаксису ближе к
языку программирования С, но используется для скриптов реже. Однако в
некоторых случаях программное обеспечение включает в себя скрипты на csh, поэтому здесь мы разберем вкратце конструкции обоих
языков.
Первой строкой любого скрипта должна быть строка, содержащая
#!полное_имя_командного процессора
например
#!/bin/sh
Этот комментарий требует выполнить скрипт с помощью указанного /bin/sh, даже если он запущен в среде другого tcsh и хотите, чтобы ваши скрипты запускались в tcsh, следует обязательно указать полный путь к tcsh в управляющем
комментарии.
В sh существуют операторы ветвления и циклов. Ниже дано
описание этих операторов. В нем жирным шрифтом выделены ключевые
слова. Конструкция "команды" подразумевает одну или несколько команд PS2 или prompt2 ).
В операторах циклов допустимы команды break (прерывание цикла,
управление передается за конец цикла) и continue (передача управления
на начало цикла, переход к следующей итерации). Эти команды действуют
одинаково в любых sh, и в csh.
Оператор ветвления if:
if условие then команды else команды fi
В bash, и новых версиях sh возможна
конструкция elseif (вложенное ветвление):
if условие then команды elseif условие then команды fi else команды fi
Оператор множественного ветвления case:
case значение_переменной in значение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.
Некоторые программы всегда возвращают код завершения ноль. Это легко
использовать для организации бесконечных циклов. Такие циклы могут
понадобиться для перезапуска процессов, имеющих тенденцию к
неожиданному и ненужному завершению. Например, так можно запускать
процесс для соединения с провайдером по выделенной или
коммутируемой линии:
while sleep 10 do /usr/sbin/pppd done
Программа sleep всегда будет возвращать ноль, так что цикл никогда не
прервется и будет исправно запускать всякий раз, как только он
завершится, например, из-за ошибки связи. Десять секунд ожидания
добавлены просто для того, чтобы было время переждать неблагоприятную
ситуацию, из-за которой произошла ошибка.
В Solaris и других системах System V такое применение менее полезно,
чем в BSD-системах, так как того же эффекта можно добиться, указывая
вызов в /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. Эта
команда печатает в стандартный выходной поток свои аргументы, а в
конце вывода выполняет перевод строки.
Команда
echo -n строка
выводит строку и не добавляет перевод строки в конце.
Для ввода информации в скриптах на sh используют оператор read:
read name echo "Name is $name"
Язык, реализованный в вашем man по вашему
В операторах циклов 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 в начале строки.
Для ввода информации в скриптах на csh используют конструкцию $< (подстановка строки из входного потока):
echo " Enter your name:" setenv name $< echo "Name is $name"
По умолчанию в sh - это $, в csh - %. Привилегированный пользователь
( root ) имеет другое приглашение - #.
В PS1 и PS2. Это - вид обычного приглашения и приглашения к продолжению ввода
команды соответственно.
При вводе длинной команды можно набрать ее в две строки. для этого
следует в конце первой строки набрать символ обратного слэша и нажать Enter - вот так:
\<Enter>
и продолжить ввод на следующей строке. Команда может быть
многострочной, как правило, допустимая длина команды составляет 1024
символа. Обратный слэш экранирует следующий за ним символ перевода
строки от интерпретации в качестве символа завершения команды. При
переходе к новой строке появится символ >, так как именно это
значение по умолчанию имеет PS2.
В csh и tcsh вместо PS1 и PS2 определены переменные prompt и prompt2.
Некоторые , имеют
дополнительные приглашения для специальных случаев. Они хранятся в
переменных PS3, PS4 и т.д., а в csh - в prompt3 и prompt4.
Многие реализации bash ) умеют
показывать приглашения, включающие в себя динамически подставляемые
части (например, имя текущего каталога). В этих bash подставляется в приглашение \w, а в csh - с помощью %/.
Помните, что назначать желаемое значение переменной можно только,
указывая макрос внутри апострофов, чтобы экранировать его от
интерпретации bash:
$PS1='\w$'
Перечень макроопределений для приглашений man по
Как уже говорилось, все
| командный процессор | основные спецсимволы |
|---|---|
sh |
$ * ? \ ` ' " [ ] < > |
csh |
$ * ? \ ` ' " ! ^ { } [ ] ! % < > |
|
$ * ? \ ` ' " ! ^ { } [ ] < > |
bash |
$ * ? \ ` ' " ! ^ { } [ ] % < > |
Для ввода специальных символов без учета их специального смысла
(например, для вычисления произведения двух чисел выполняется команда expr 2 \* 2, надо передать программе expr просто звездочку,
не расшифровывая ее специальное значение для \ или
заключайте в кавычки или апострофы. Кавычки отличаются от апострофов
тем, что они экранируют от интерпретации все специальные символы, за
исключением `, $ и \, а апострофы экранируют абсолютно все
специальные символы.
Каждый
alias );`
` ;csh и tcsh кэшируют сразу после начала работы
список выполняемых файлов из каталогов, указанных в переменной path,
поэтому при изменении значения этой переменной или при добавлении
новых исполняемых файлов в указанные в ней каталоги следует выполнять
команду rehash, чтобы
Для получения официальных документов о завершении программы дополнительного профессионального образования (удостоверения о повышении квалификации, дипломов о профессиональной переподготовке и MBA) необходимо предоставить:
Внимание! Вы можете не заказывать доставку бумажной версии официального документы, а скачать его в электронном виде и распечатать самостоятельно. Информация о выданном документе в течение 1 месяца загружается в Федеральную информационную систему «Федеральный реестр сведений о документах об образовании и (или) о квалификации, документах об обучении» - ФИС ФРДО.
Доступ на новый сайт осуществляется с использованием адреса электронной почты, который был указан вами при регистрации на "старом". Мы постарались перенести все ваши данные с прежнего ресурса, однако не исключена вероятность потери части информации.
При возникновении проблемы со входом, воспользуйтесь функцией сброса пароля
Если вы обнаружите несоответствия, пожалуйста, сообщите нам.