>> [Семинар - Unix Корпуса, Среды]
[Дуглас Клайн - Гарвардский университет]
[Это CS50. - CS50.TV]
>> Сегодняшняя тема является оболочка Unix.
Я Дуглас Клайн, эксперт, или по крайней мере достаточно компетентным пользователь, оболочки.
Оболочка представляет собой интерфейс для пользователя к операционной системе компьютера.
Название вводит в заблуждение, как, в отличие от оболочки животного,
который трудно и защитная, компьютер оболочка позволяет для общения.
Так пористая мембрана, вероятно, будет лучше, метафора.
>> Оригинальный оболочка для Unix является оболочкой Bourne.
Борн пишется B-O-U-R-N-E.
Борн был одним из первых авторов Unix,
и так оболочка назван в его честь.
Название этой оболочки в качестве команды является просто ш.
Это команда, которую вы можете выполнять.
Оболочка начинается при входе в систему.
Когда вы войти в компьютер, оболочка просто начинает работать для вас,
и вот что занимает ваши команды.
Он может начать в другое время также.
Если вы вызова окна без другого указанием, он будет запустить оболочку для вас.
Вот как получается, что вы можете пойти к окну и начать ввод команд
и так далее там, даже если вы не войти в это окно.
Кроме того, если вы заходите на удаленную систему,
то он будет запустить оболочку на удаленном компьютере.
И это возможно запускать команды без интерактивной оболочки.
Это может означать в вашей текущей работе,
и это может также означать дистанционного управления.
Вы можете отправить команду на другом компьютере,
которая включает в себя запуск оболочки там.
На самом деле, он должен включать в себя запуск оболочки есть
даже если это не ваша конечная цель.
Когда что-то начинает вот так, это не обязательно начинать новую оболочку.
Если вы воспитывать новое окно, это можно сказать его воспитывать редактор
или некоторые другие команды.
В этом случае, редактор начнет работу с нуля.
По окончании редактор, окно заканчивается.
Это немного необычно, но это может быть сделано.
В тех случаях, это не будет оболочки.
Так что это не обязательно, что окно или некоторые из таких приложений будет воспитывать оболочку.
>> Shell разбирает команды.
Разбор означает определение различных элементов и их классификации.
В команде, вся строка, что вы печатаете,
будет 1 или более одиночных команд для выполнения.
Другие элементы могут быть аргументами.
Там также может быть специальных символов, которые влияют на выполнение команды.
Они могут направить вывод где-нибудь кроме экрана
если команда будет обычно отправить его на экран.
Это может перенаправить ввод, он может делать другие вещи также.
Существуют и другие символы, символы, и так далее.
Разбор включает выявление и интерпретации эти вещи.
>> Теперь, если больше нет вопросов, что является довольно вероятно, поскольку нет больше людей,
мы пойдем к моему следующему странице здесь.
>> Я уже говорил ранее, что Bourne Shell является начальным оболочки.
Есть и другие.
Одним из них является C-оболочка. Эта команда CSH.
Название C-оболочка просто игра слов.
Эта оболочка была введена с Berkeley Unix в середине 1970-х.
Беркли Unix был знаковым событием в развитии Unix.
Это была огромная революция и включали в себя введение этой оболочки.
Причина этого игра слов, С-оболочка,
в том, что C-оболочка имеет некоторые характеристики в ней, которые напоминают языке Си
которых Bourne Shell не имеет -
или у него не было в то время.
Там также TC-оболочки.
Это является расширением С-оболочки.
Он имеет дополнительные функции, многие из которых являются полезными для интерактивного использования,
таких как вспоминая команды в механизме истории,
которые я опишу несколько позже -
в простой форме, по образцу редактора.
Она также имеет привязки, которые позволяют связать короткую строку клавиш для более длительного команды.
Мы не собираемся получать в том, что сегодня.
Он имеет некоторые особенности, которые являются полезными для программирования.
Тем не менее, С-оболочка не часто используется для оболочки программирования.
Программы оболочки, если вы еще не знаете,
программы, которые состоят из характеристик оболочки.
Вы можете запустить их в качестве программ.
Ты пишешь кучу команд оболочки в файл и запустите файл.
Вам не нужно, чтобы скомпилировать его. Это интерпретируемый язык.
Фраза С-оболочка теперь неоднозначно, так как это может относиться только к первоначальному C-оболочки, CSH,
или всем С-оболочек, в том числе Tcsh. Это немного неоднозначным.
>> Спустя оболочка Korn оболочки, КШ, названный в честь программиста, Корн.
Эта оболочка попытались включить в 1 оболочки
преимущества C-оболочки для интерактивного использования
и Bourne Shell для программирования.
Он был использован в качестве интерактивной оболочки на некоторых людей - меньшинство.
Позже тем не менее, была и другая введение, оболочка Bash, BASH,
снова игра слов, Bourne-Again Shell.
Это расширение оболочки Bourne. Корн оболочка также. Оба из них.
Он имеет те же цели Korn оболочки слияние С-оболочечному
и преимущества Bourne Shell в в 1 оболочке.
Многие из усовершенствований оболочки Korn, также включены в Bash.
Bash, однако, имеет более и поэтому предпочтителен.
Борна-снова оболочки и оболочка Korn называются снаряды Борна типа
потому что они включают в себя характеристики и в оболочке Борна, в
которые несовместимы в некоторых отношениях с С-оболочек.
Есть и другие снаряды, кроме тех, некоторые предназначены для служебного пользования,
может быть, ограничивается некоторых команд, может быть, специализированные цели, не часто используется.
>> Хорошо. Следующий товар здесь.
Оболочки Bash стало ассоциироваться с различными формами Linux.
Я не уверен, если это правда любой формы.
Есть много форм там, и я не использовал их все,
но в тех, которые я использовал это стало ассоциироваться с ним.
Насколько мне известно, нет ничего о Bash
что делает его больше совместим с Linux
чем любой другой комбинации оболочки и операционной системы.
Я думаю, что это, вероятно, просто отражает наклонности программистов.
То, что это стало ассоциироваться с Linux и еще одна причина предпочесть Bash в КШ
так как вещи, вероятно, будут в ней написано, и это может привести к распространению.
Я дам вам другие причины, которые в дальнейшем.
Bourne сценарии оболочки должен работать под оболочкой Korn или Bash.
Если вы пишете что-то для оболочки Bourne,
вероятно, можно выполнить ее под Ksh или Баш.
Сценарии оболочки Korn, вероятно, работать под Bash, но я не могу гарантировать, что.
Позже здесь, скрипты C-оболочка должна работать под TC-оболочки.
C-оболочка фактически никогда не широко используется для написания сценариев
так как Bourne Shell, а затем снаряды Борна типа были предпочтительнее для этой цели.
Так что на самом деле не так уж и важно.
Есть довольно много Bourne Shell скриптов, которые были написаны давно,
перед оболочки Korn или Bourne-Again Shell были введены.
Те, до сих пор используются, часть из операционных систем,
и так что вы найдете их, если вы посмотрите в операционную систему
или некоторые старые пакеты программ.
>> Bash в какой-то степени становится своего рода лингва-франка для операционных систем.
Это уже был продлен до ОС Windows и VMS.
VMS, в случае, если вы не знаете, является собственная операционная система
из Digital Equipment Corporation, которая все еще используется, в основном за кулисами.
И если это будет работать на нескольких различных операционных систем,
скорее всего, люди, как правило, переход к нему.
Но это развитие относительно недавно.
Это только начало, так что я не могу предсказать, если это получится, чтобы действительно быть, что вид лингва-франка.
Кроме того, поскольку файловые имена путей и библиотеки отличаются
между этими различными операционными системами,
Вы не могли бы быть в состоянии написать сценарий Bash на одной операционной системы
а затем запустить его на другой.
Вы должны быть в состоянии переместить его между различными Unix, Linux
Операционная система Mac OS, но не обязательно, чтобы ОС Windows или VMS.
Возможно, вам придется изменить описание путь доступа к файлу,
и некоторые библиотеки могут быть разными,
которые могут повлиять на то, что некоторые команды работать
или как они обрабатывать аргументы и тому подобное.
В дополнение к этому, другой осторожность в том, что нет никакой гарантии
что все различные снаряды я упомянул - Bourne Shell, С-оболочка,
TC-оболочки, Korn оболочки, Bourne-Again Shell - будут доступны в любой Unix
или Linux или Mac OS компьютер.
Они просто не может быть там.
Это один из предостережений здесь.
Это прискорбное ограничение здесь, так как вы хотели бы вещи, чтобы работать везде,
но, к сожалению, вы не можете полагаться на это.
>> Хорошо. Следующая один здесь.
Давайте предположим, что вы хотите написать скрипт,
программа, состоящая из команд оболочки.
Вы пишете ваши команды, поместите их в файл и запустите файл.
Что делать, если вы хотите включить аргументы?
В случае операций оболочки, аргументы называются параметры или позиционные параметры
и они будут называться знаком доллара и цифры, $ 1, $ 2.
Так что, если сценарий имеет это имя, мой первый аргумент может быть аргументом 1
и мой второй может быть аргументом 2,
и внутри моего сценария, если я хочу обратиться к этим вещам -
давайте стереть это, так как я действительно не собираюсь запустить его -
в моем сценарии я мог бы $ 1 для обозначения arg1,
$ 2, который выйдет именно так, arg2.
Так что те символы доступны для обозначения аргументов,
и те, применяются ко всем оболочек.
Кроме того, существуют и другие символы.
$ * Относится ко всей списке аргументов, все из них.
$ # Относится к числу аргументов.
Опять же, это относится ко всем оболочек.
Эти символы, * и #, может быть использован с теми значениями в других местах тоже.
Мы не будем получать в этом.
>> Shell спецификатор линии. Что это?
Допустим, вы написали скрипт, и это для конкретного оболочки, и вы хотите, чтобы запустить его.
Как вы знаете, какую оболочку ваша операционная система будет использовать для запуска сценария?
В какой-то момент вы могли бы предположить, что это было бы запустить его в оболочке Bourne
если вы не сказать иначе,
но люди не пишут сценарии в Bourne Shell, что много больше
и вы даже не можете полагаться на что больше.
Так вот у нас есть оболочки спецификатор линию прямо здесь.
Это указывает Bash.
Обратите внимание, что это указывает его в имени пути, / бен / Баш.
Если компьютер имеет оболочку Bash, но не в каталоге бен, / бен, это не будет работать.
Это еще одна классификатор, другой осторожность здесь.
Знак фунта является строка комментария характер.
Это относится ко всем оболочек.
Частный случай здесь, #! В начале сценария, является частным случаем.
Это определяет оболочку, в которой для запуска скрипта.
Как я уже говорил, это может быть не то же самое место / бен.
Кроме того, есть еще одна вещь, здесь.
Если вы просто использовать знак решетки, не восклицательный знак и имя пути,
, которые должны указывать на C-оболочку.
Тем не менее, я не рекомендую делать это, потому что я не может гарантировать
что это будет работать всегда.
Если вы хотите C-оболочку, было бы лучше, чтобы сказать об этом.
Тогда есть что-то довольно запутанной здесь.
Если вы используете оболочку спецификатор линию, например, / бен / Баш
и что оболочка не доступны там,
нет такого понятия, как / бен / Баш на конкретного компьютера,
либо потому, что он не имеет Bash или потому что это в другом месте,
вы получите ошибку, говорящую о том, что сценарий вы побежали не существует.
И, конечно, ваш сценарий существует, так что сообщение об ошибке сбивает с толку.
Причина того, что операционная система дает эту ошибку
или, точнее, что ваш интерактивная оболочка, в которой вы работаете это дает эту ошибку,
является то, что он сообщает команду использованный, который является имя скрипта.
Эта команда эффективно называют оболочку по имени сценария.
Вот где вы получите, что сообщение запутанной ошибке.
Другой способ вызова скрипт
является, указав оболочки в командной строке, как здесь.
Это команда. Это говорит запустить Bash, а затем запустить свой сценарий в Bash.
Это будет иметь приоритет над спецификатора линии,
и это имеет характеристику позволяет обеспечить разной имен путей.
Если вы просто дать команду, операционная система будет выглядеть для этой команды
в разных местах.
Если оно есть, оно должно найти его.
Компьютер будет найти Bash, где он находится и запустить его,
так что вам не нужно, то для беспокойства о том, где он находит его.
Есть потенциально другие проблемы здесь,
как будто есть более 1 версия Bash, что возможно, хотя маловероятно.
Так что еще один способ иметь дело с этими вещами.
Тендерный линии могут звонить на любой оболочку.
Они также могут вызывать другие, чем оболочек вещи.
Примеры, которые я имею здесь сед, который является редактором потоков;
AWK, который является языком обработки шаблон;
и Perl, очень высоко развита скриптовый язык.
Если поставить линию спецификатор показывающее один из этих программ в начале,
он будет идти прямо в этой программе, а не начинать оболочку.
Эти программы имеют пределы своих способностей.
Perl является очень способным. Sed является редактором. Он может делать то, за рамки просто редактирования.
Но это может быть трудно программировать, что.
Кроме того, передачи аргументов и прочее в сценарий либо невозможно, либо запутанной.
Таким образом, в этих случаях с AWK или сед, это, по крайней мере, по моему опыту,
предпочтительнее, чтобы написать сценарий и вызова оболочки AWK или сед из сценария оболочки
вместо вызова AWK или сед как сценарий спецификатора линии.
Perl является весьма разнообразны язык, как я уже сказал.
Вы не можете запустить интерактивные команды в Perl,
Это означает, что вы не можете проверить части сценариев, которые вы разрабатываете
запустив их в интерактивном режиме.
Тем не менее, это чрезвычайно способный язык
и превратился в очень широко используемого инструмента.
Вот только немного вводного замечания о определителя линий.
>> Во всех или большинства форм Linux - опять же, я не могу быть уверенным, что все -
и в Mac OS, если ввести CSH вы получаете Tcsh,
, и если ввести ш вы получаете Баш.
Они пытались там, чтобы дать вам более продвинутые версии этих оболочек,
но это может привести к путанице.
Если вы пишете сценарий, используя Tcsh или Bash имеет при вызове CSH или ш
, а затем попытаться запустить его на компьютере, который не имеет Tcsh или Bash,
Вы могли бы получить некоторые ошибки, если есть команды там
которых эти снаряды не признают.
Кроме того, вы, возможно, призван свою оболочку на локальном компьютере
назвав его как ш или CSH, а затем получить более продвинутые снарядов.
Вы можете даже не думать о том, что вы используете более продвинутые оболочку.
Так что это потенциальная ловушка.
Как это было установлено, что если ввести ш вы получаете Bash,
если вы введете CSH вы получаете TSCH?
Есть вещи, в этих компьютерах называемые ссылки
которые могут подключаться к именам файлов для обозначения одного и того же.
Это может быть либо 2 названия одного и того же файла или файла, цель которого состоит в ссылке на другой файл.
Они называются жесткие и символические ссылки. Мы не будем идти в этом больше сегодня.
Там также может быть отдельные файлы - 1 файл ш, 1 файл Bash -
но они оба работают Bash.
Тогда есть другой классификатор здесь.
Если вы звоните один из этих снарядов на одно имя,
можно подумать, вы получите такую ​​же функциональность как назвав его по-другому.
Ну, это на самом деле не всегда верно.
Эти команды могут рассмотреть название, под которым они были названы
и они могут, на основе этого имени, ведут себя по-разному.
Там могут быть вопросы пытаются соответствовать стандарту.
Некоторые из вас, возможно, слышали стандарта или иной POSIX,
возможно другие особенности.
Это могут быть выбраны иногда аргументов командной строки
или установив переменные оболочки.
Назвав его как ш или Баш на самом деле может привести к иному исполнения
даже если это тот же файл, что вы выполнения.
Другим важным моментом является то, что даже если другой компьютер имеет Tcsh или Bash,
если они не связаны, поскольку они на локальном компьютере
если у вас есть локальный компьютер Linux или Mac OS,
с другой стороны вы будете получать оболочке, что вы называете ш или CSH, а не тот, что вы могли бы предпочесть.
Нынешний Bourne Shell имеет усовершенствования меньше, чем те, в Bash
но мимо тех, в оригинальной оболочке Bourne.
В результате этого, даже текущий оболочка Bourne, SH,
даже когда это не Bash, напоминает язык С больше, чем С-оболочка делает.
Это была неправда, когда С-оболочка впервые была создана, но она разработала именно так.
Вы могли заметить, здесь, что все эти названия оболочки для оболочки Bourne, кроме
есть что-то, чтобы указать, какую оболочку они - CSH, Баш -
но Bourne Shell просто ш.
Почему? Это было первая оболочка.
Это было оболочка затем, не оболочка,
и так как это было оболочка, не было никаких оснований, чтобы отличить его от другого корпуса.
Так вот почему она имеет это имя и все еще делает.
>> Этот верхний вот строки из базы паролей для учетной записи у меня есть
на другом компьютере.
Я собираюсь попытаться получить это имя, чтобы вы могли видеть, что часть в конце, оболочку.
База данных паролей держит входа характеристики для всех пользователей.
В начале это имя пользователя, которое вы можете увидеть последние 2 буквы мои сейчас.
Все описанные ниже поля разделяются двоеточиями.
Последнее поле, как вы можете видеть, это бен / Tcsh, оболочка.
Это оболочка спецификатор.
Там-то здесь интересно.
Когда Unix была впервые разработана, была только 1 корпус,
так что не было никакого выбора там.
Так почему же они позволяют поле в базе данных паролей указать оболочку?
Я не знаю, но это счастье, что они и сделали.
Это довольно трудно внести изменения в формат базы данных пароль
потому что многие программы, обратитесь к своему формату
и придется переписать.
Это удачный или случайно развитие, что они включены, что поле.
Это своего рода пароль строке файла используется на всех Unix и Linux компьютеров, насколько я знаю.
Mac имеет свою собственную систему.
Это на самом деле имеет файл паролей с линиями в этом формате,
но это не где характеристики пользователей определяются.
Другой скобках замечание там.
>> Если вы звоните оболочку, вы можете вызвать его в качестве суб-оболочки из существующих оболочек.
Так что если я иду сюда, давайте избавиться от этих вещей.
Вот я в С-оболочки.
Эта переменная, которая точно определяет мою оболочку,
на самом деле это не всегда надежный способ определения того, что оболочки вы работаете,
но в этом случае.
Что, если я просто наберите -
Сейчас я в Bash.
Некоторые вещи будут то же самое. Ls рассказывает мне мои команды.
Если я приостановить назад к моему C-оболочки, LS, же. Не так ли?
FG, на переднем плане, к моему оболочки Bash.
PWD, текущей директории, обратно в C-оболочки.
PWD, другой каталог - на самом деле не другой каталог в этом случае.
Это тот же каталог.
Скажем, я хочу, чтобы вызвать команду здесь: где Ls.
Что это делать?
Он говорит мне, где команду Ls,
тот, который дает мне список каталогов, расположен в Ls.
Давайте вернемся к Баш оболочки. Давайте попробуем то же самое.
Хм, интересно там, где: команда не найдена.
Почему это происходит?
Где команда встроен в С-оболочки.
Это не команда, которая должна быть прочитана в памяти откуда-то еще и казнен.
C-оболочка запускает его, передав исполнение в части своего кода
и это не в Bash оболочки.
Так Bash, не имея такой встроенной команды, ищет он, не найти его,
и мы получаем ошибку.
Так что у нас есть оболочки Bash работает под C-оболочки, и мы называем это суб-оболочки.
И на всякий случай вам интересно, Bash оболочка имеет свой собственный способ поиска команд.
хэшированного относится к тому факту, что он может быть выполнен быстрее,
были найдены более быстро.
Это одна из усовершенствований, встроенных в некоторые из этих оболочек.
>> Снаряды Борна типа являются предпочтительными для программирования.
У них есть управляющие структуры, как петли, условные операторы,
вид команд, которые вы можете использовать в языках программирования, как C
или любой другой язык. Может быть, вы программируете в Java или любой другой.
Оболочки их тоже.
Снаряды Борна типа, в частности, Bash, имеют более
и они предназначены с большей гибкостью.
Баш оболочка имеет массивы. Оригинальный Bourne Shell нет.
Так что может быть значительно выгоднее для программирования.
C-оболочка фактически имеет массивы, но не имеет много таких других функций.
Снаряды Борна типа выполняется быстрее
если они не имеют возможности, предназначенные для интерактивного использования.
Вы загружаете вещи вниз для одной цели, это загружает их для другой цели.
Там в том, что компромисс есть.
Эти функции, которые предназначены для интерактивного использования
на самом деле мало или вообще не использовать для написания сценариев.
Это можно использовать интерактивную подоболочку так же, как тот, который я начал есть
чтобы проверить команды, которые вы собираетесь использовать в скрипте.
Это то, что вы не можете сделать с Perl. Вы можете сделать это с оболочками.
Даже структуры, такие как циклы и так далее может работать в интерактивном режиме.
Они иногда полезно работать в интерактивном режиме,
но более вероятно, что вы используете их, чтобы разработать сценарий.
>> Псевдонимов.
Это будет о C-оболочки.
История механизм, где вы вернуться к ранее команд
или их части, которые вы уже бежать.
Опять же, о C-оболочки, оболочка Bourne и Korn оболочки иметь эти вещи,
но я не собираюсь в них.
Так вот несколько полезных псевдонимы, что у меня есть.
Вместо того чтобы печатать Ls - это общая команда -
просто наберите л и сэкономить 1 символ.
лс с различными вариантами, все те, работа.
Обратите внимание, что эти определения имеют кавычки них.
В этих случаях кавычки не надо.
Если вы можете определить эти псевдонимы без кавычек, это будет работать.
Они рекомендуются.
Есть ситуации, в которых вы не можете использовать цитату
потому что вы хотите, чтобы что-то случилось, когда цитата бы предотвратить.
Иногда вы можете процитировать часть определения, но не все.
Это также обычно рекомендуется использовать одинарные кавычки, а не двойные кавычки.
Двойные кавычки оказывать действие на определения переменных,
особенно заставляя их быть оценены, а не остановить его.
Зачем нам, чтобы остановить оценку?
И как котировки сделать это для нас?
>> Вот команда, которую вы могли бы найти интересным.
'Ls г *'
г *, как вы, наверное, знаете, это маска выражение
для всех имен файлов, начиная с г.
Если я просто пишу в командной Ls д *, я получу список всех этих имен в моем текущем каталоге.
Если я определяю, что псевдоним, как здесь с кавычками,
он будет использовать эту команду в текущем каталоге, где вы работаете его.
Но если вы запустите определение псевдонима без кавычек,
он будет оценивать подстановки д *, когда он работает этот определяющий команду.
Таким образом, определение псевдонима будет Ls за которым следует список файлов в каталоге
, в котором команда псевдоним выполняется,
независимо от того, где вы на самом деле намерены выполнить команду.
Это не много пользы, и одиночные кавычки предотвратить оценку звездочкой.
Таким образом, вы просто получите четкости существо Ls г *.
Затем, когда вы запустите псевдоним, LGS, он затем кладет это.
Теперь нет никаких котировки, и он будет оценивать звездочку, когда вы выполните команду псевдоним.
Так вот одна вещь.
Двойные кавычки бы иметь тот же эффект здесь,
но есть и другие случаи, в которых двойные кавычки не будут работать так хорошо.
>> Вот еще один.
Вы можете знать команду Grep.
Команда Grep может использоваться для сканирования файл для линий, которые имеют определенные строки.
Так что давайте идти сюда, и я буду выходить из моей оболочки Борна.
Хорошо. Вот файл.
Давайте говорить, что это строки азбука Grep. Там это.
Если я это сделаю Grep zddd, я ничего не получит. Хорошо.
Так он находит строку, он сообщает, что не находит, он не сообщить об этом.
Он выводит любую строку, которая имеет эту строку на нем.
Есть всевозможные варианты здесь, которые вы можете найти в документации.
Вот один из способов сделать это.
Что об этом один, псевдоним grabc 'Grep азбука "?
Это собирается включить 1 аргумент, когда псевдоним определяется.
Так что, если я могу это сделать здесь, сейчас, если я сделаю grabc,
Теперь псевдоним включает больше, чем простой команды. Она также имеет аргумент.
Пока что работает.
У меня есть другой команды здесь, на этот раз, так это разные строки там
и показать, что это не находит ничего там, так как это не соответствует.
>> Что делать, если я хочу включить в определение псевдонима файл, который я собираюсь поиск
и я хочу дать в качестве аргумента псевдонимом строки, что я ищу?
Я, возможно, захотите, чтобы сказать ABC в качестве аргумента моей псевдоним,
но он же уже определили файл.
И вот, когда это выражение приходит дюйма
Обратите внимание, здесь мы имеем Grep как и раньше.
У нас есть файл здесь, строки.
\! ^, Вид со странным выражением, я полагаю, если вы еще не видели это прежде.
Восклицательный знак является частью C-оболочки механизма истории.
Он может вспомнить предыдущие команды, он может вспомнить аргументы этих команд и так далее.
Механизм история используется как часть наложения.
Если указать строку после восклицательным знаком, он будет ссылаться на этой линии в списке журнала,
которые мы не будем получать в настоящее время, так как это совсем другая тема.
Можно указать часть строки.
Так 3:02! Бы второй аргумент командной № 3.
Каретка здесь, в этом выражении означает первый аргумент.
Если вы не дать ему указание на то, какую команду вы имеете в виду,
это относится непосредственно к предыдущей команде,
и курсор находится символ для первого аргумента.
Потому что это вставки, а не количество, вам не нужно использовать двоеточие,
так! ^ означает первый аргумент предыдущей команды.
Немного перепутал здесь.
В этом случае, когда вы используете это как определения псевдонима,
ссылка история отсылает к командам, в которых используется псевдоним.
Вот что происходит назад 1 команду как операция истории,
но как операция псевдонима это относится к команде, в которой можно было бы ввести,
говорят, grstrings_file.
У нас есть котировки здесь в нем. Что обратный слэш для?
В этом случае, как и везде, мы не хотим, чтобы выполнить механизм истории
при определении псевдоним.
Если у нас не было обратную косую черту там, оболочка будет тянуть в первом аргументе
команды прямо перед его выполнил эту команду псевдоним, который мы не хотим.
Мы хотим, чтобы это было построено в команде псевдонима позвонить в споре позже.
Одиночные кавычки не избежать восклицательный знак, ссылка истории.
Может быть, вы знаете, выражение побег значит изменить смысл чего-то.
В этом случае, это означает, чтобы остановить что-то от того, особое значение.
Особый смысл восклицательным знаком является история.
Побег и он не имеет, что смысл.
Котировки не делают этого; косая черта делает.
Таким образом, мы фактически используя 2 уровня побега здесь.
Я собираюсь двигаться эту команду в другое окно без ввода его
с помощью этих операций редактирования, которые могут оказаться полезными.
Что-то еще здесь я покажу вам.
Если просто ввести псевдоним без аргументов, он говорит вам все ваши аргументы.
Это куча псевдонимов у меня уже был здесь
кроме тех, которые я использую здесь сегодня.
Но если я просто наберите с именем псевдонима, он говорит мне, что это значит.
Обратите внимание, что котировки ушли и обратный слеш нет.
Эта строка вот результат этого определения псевдонима,
и теперь у него есть только! ^ в нем.
Это будет выглядеть в строках файлов для чего-либо.
Так что если я делаю grstrings_file строки, я не давал ему ничего искать там,
но это выглядит в строках.
Это не нашли строки слов в строках файлов, но это найти ABC.
И это не считает, что.
Так вот мы даем аргумент, который бьет в определение псевдонима,
, который вставляется в нее.
Это место, где это выражение приходит.
Вы можете использовать больше чем 1.
Каретка является символом первого аргумента.
Если вы хотите использовать второй аргумент, вы бы тогда сказать: 2.
Там нет специальный символ для второго аргумента.
И потому, что вы используете цифру, вам придется использовать двоеточие.
Существует, однако, другой выбор здесь.
Знак доллара означает последнего аргумента.
И потому, что это символ, можно опустить двоеточие.
Поэтому было бы быть последним аргументом в списке.
И есть также, что один.
Asterisk означает, что все, так что это полный список аргументов,
и снова, можно опустить двоеточие, потому что это не цифра.
Я надеюсь, вы все наблюдения все это.
>> Механизм история может вернуться к более ранним линий в списке журнала.
Вы можете сделать это в определении псевдонима.
Я никогда не видел это сделать.
Было бы иметь эффект вытаскивая ранее команды из списка истории
при выполнении псевдоним, который мог быть разные команды
в зависимости от того, когда и где вы ее выполнить.
Предположительно вы можете вытащить такую ​​ссылку
просто знать, что раньше команда была.
Я никогда не видел это произойдет.
Я полагаю, кто-то, возможно, захотите, но это очень маловероятно.
Существует еще одна вещь здесь.
Если вы используете эту ссылку История типа,
то только аргументы для которых существует такая ссылка используются.
Если у вас есть определение псевдонима, которая не использует ссылку История типа,
если он просто станет началом команды
и у вас есть дополнительные аргументы, то все, что вы введите после этого
будет добавлен к команде.
В этом случае, на примере я просто дал там, мы использовали первый аргумент;
мы не использовали любые другие.
Если другие аргументы дали в командной строке, то они не будут использоваться.
Так что если вы используете ссылку на историю вообще, то вы должны использовать его, чтобы получить любой аргумент.
>> Там другая вещь здесь я просто хочу упомянуть, частично в скобках,
а именно, что эта история механизм с восклицательным знаком
восходит к первоначальной C-оболочки.
Tcsh представил историю операций
которые используют виды команд и строками из редакторов,
либо Emacs или VI.
Мое личное мнение, Emacs является гораздо проще в использовании для этой цели
даже если вы используете VI для обычного редактирования.
Существуют различные Emacs команды, которые сейчас приспособленные для истории.
Контроль P получает предыдущую строку в списке журнала.
Другой управления P будет вам тот до этого.
Стрелка вверх делает то же самое.
Контроль N получает следующую команду, если вы уже прокручивается назад некоторые способы.
Стрелка вниз делает это слишком.
Вы можете переместить слева направо с помощью стрелок и различные другие вещи.
Это может сделать использование механизма истории
гораздо проще, чем с помощью синтаксиса восклицательным знаком,
но вы не будете использовать, что в определении псевдонима.
Мы пойдем над тем, в другой раз.
>> Переменные.
Вы знаете, что переменные в языках программирования.
Снаряды имеют их также.
C-оболочка использует набор команд для назначения переменных,
так что устанавливает переменную A к значению B -
как я уже сказал, бесполезную определение, но пример того, как это используется.
Набор команд будет создать переменную, если она еще не существует.
Позиционные параметры для сценариев оболочки можно считать переменные,
но пользоваться ими и правила для них несколько отличаются.
Вы не можете присвоить значение $ 1 в ходе сценария.
Вы должны были бы определить новую переменную для этой цели, если некоторые из вас хотели.
Введите установить без аргументов и вы получите список всех в настоящее время определенных переменных.
И давайте вернемся к моей другой оболочки здесь и посмотреть, что получится, если мы это делаем.
Довольно длинный список есть, не так ли?
Прокрутка вверх немного. Посмотрите на все это.
Некоторые из этих вещей определяются автоматически с помощью оболочки.
Оболочка создает переменную и придает ему значение.
Некоторые из них определены оболочки, но затем переопределены пользователем
в соответствии со своими предпочтениями.
И некоторые из них создаются пользователем в зависимости от того, что он делает в тот день.
Вот только установить без аргументов.
Там странная особенность здесь этой вещи.
Там есть, чтобы быть либо без пробелов между знаком равенства и имя переменной
а значение или пространства по обе стороны знака равенства,
как в этом.
Это не будет работать, и это на самом деле является допустимой командой
но он не будет делать то, что вы собираетесь.
Эта команда будет работать, потому что если вы просто говорите установить и имя переменной
с не равными, войдите или установить и имя переменной со знака равенства и нет значения,
он будет установить переменную в пустое значение.
Так множество А = это допустимая команда.
Набор команд можно определить более 1 переменной на той же линии.
Так эта команда здесь имеет эффект определения А и Б в пустые значения.
Наверное, нет, что вы хотите.
Это один здесь, было упомянуто ранее, приведет к ошибке
потому = б не является допустимым выражением.
Имя переменной не может начинаться с знака равенства.
И есть эти дальнейшие вещи здесь.
В двоеточия были использованы для выбора аргументы из строк истории,
и они могут быть использованы, - и я не стал вдаваться в перед - изменить эти вещи.
Они также могут быть использованы для модификации переменных оболочки.
Вот эта вот, $, имеет значение.
: R вылетит расширение.
Расширение будет ничего после точки,
точка и все следующие за ним в конце файла,
только в конце списка после последней косой черты.
Так что я его здесь.
является то, что. Это упадет. О.
Если нет расширение, только имена путей после последней косой черты, оно не будет иметь никакого эффекта.
: ч, что переменная выражение, вылетит последний элемент списка каталогов,
снова, только после последней косой черты.
Так / / B / C становится / / б,
но этот изменяется, потому что элемент после списка является недействительным.
Здесь есть нечто, что также я хочу подчеркнуть.
Эти отборочные не искать существования этих файлов.
Они просто ищут строк.
Они предназначены для управления имена файлов, имена маршрута,
но они могут быть использованы для любой строки, даже если это не имя файла.
И они не выглядят для существования,
так что если нет такого файла, / / ​​б / с, это все равно будет работать.
Будь то никакой пользы это другой вопрос, но он все равно будет работать.
Переменные отличаются в оболочках Bourne. Мы вернемся к этому позже.
Знак доллара можно избежать, как восклицательный знак и звездочкой.
Знак доллара может быть с обратной косой чертой или одинарные кавычки.
Двойные кавычки имеют странный эффект во всех оболочек
заставить оценке той или иной знак доллара переменной выражение.
Так что, если это время бежал в одну сторону, двойные кавычки может иметь эффект
из заставляя его быть оценены в любом случае.
Это немного сбивает с толку.
При наличии нескольких уровней избежать, такие как одинарные кавычки внутри двойных кавычек
или двойные кавычки внутри одинарных кавычек, вы должны проверить, чтобы увидеть, что произойдет
переменной, если вы используете один.
Эти 2 ситуации - двойной внутри одного, один внутри двойной -
не обязательно даст вам тот же результат.
Переменные окружения, связанные переменные C-оболочки.
Переменные окружения также переменные в C-оболочки,
и они также являются переменными в других оболочках тоже.
В C-оболочки, они являются различными наборы.
То, что я говорил до примерно переменных оболочки.
Переменные окружения особым набор переменных
за исключением нескольких переменных, которые мы называем связанные переменные,
которые очень важны, и мы получим в этом чуть позже.
Переменные окружения автоматически передаются на
чтобы оболочек или команд, которые выполняются из вашей оболочки.
Другие вещи не являются. Переменные оболочки, псевдонимы не являются. Переменные окружения.
Вот почему мы называем их переменные среды,
идея в том, что окружающая среда простирается дальше просто ваш текущей оболочки.
Они могут быть использованы для определения вещи для команд.
Вот пример. Принтер, LPDEST.
Оба этих переменных можно определить принтер, который команда будет использоваться для печати вещи.
Если у вас есть несколько принтеров вокруг, вы можете поставить один вы любите.
Причина у нас есть 2 переменные в том, что различные наборы команд были написаны
с помощью этих различных переменных.
Вы могли бы дать им разные значения.
Скорее всего, вы будете дать им обоим и то же значение.
Эти вещи работают, потому что команды, которые делают печать
были запрограммированы для изучения значения этих переменных.
Если программа не были написаны таким образом, будто он написан сделать что-то еще,
переменная будет иметь никакого значения.
Таким образом, операционная система не ищет этих переменных
каждый раз, когда вы смотрите на принтер.
Команда, которая делает печать ищет этих переменных, если он запрограммирован таким образом.
Эти переменные часто определяются в файлах инициализации
но не обязательно.
Вы можете определить их в командной строке.
Они могут быть определены в команде.
Команда, которая работает что-то может иметь свой собственный выбор переменных -
переменные, которые являются уникальными для конкретного программного пакета, например.
Они будут определены, когда вы запускаете этот пакет.
Как эти переменные передаются в суб-оболочки?
Когда суб-оболочки написано, это не написать в этой области.
Площадь югу от оболочки, которая посвящена переменных окружения
написано не суб-оболочки; она написана копирования.
При запуске обычного команду, например, эти команды на печать или любой другой,
они начинают с создания новой оболочки.
Оболочка создает оболочку, а затем переписывает ее часть
с командой, что вы работаете, что является немного запутанным,
но это, как эти команды получить переменные окружения
что они затем обратитесь к позже.
Команда здесь для определения переменной SetEnv.
Это, как вы определяете его. Это 3 элемента: SetEnv, переменные, значение.
Если вы просто SetEnv без аргументов, что вы получите?
Перечень всех этих переменных.
Опять же, это хороший длинный список и в этом случае, как и в других,
эти переменные определены в основном моей операции входа на самом корпусе
а не все, что я сделал.
Там другая команда здесь, printenv.
Это также выводит на окружающую среду.
Обратите внимание, это последнее, что здесь, EDITOR = VI.
Это говорит, что если я использую то, что вызывает редактор
и я не указать редактор, и это позволяет мне выбор, он может дать мне VI.
Что делать, если я делаю printenv EDITOR? Это говорит мне, что это такое.
Прямо перед этого, была переменная, МЕНЬШЕ.
Это ваши дефолты варианты, когда я запускаю МЕНЬШЕ команду,
который отображает файлы.
Так что, если я это сделаю, printenv может занять 1 аргумент или 0 аргументы,
не более 1.
Есть и другие команды также, но мы не собираемся, чтобы получить во всю сегодня.
Запомнить было модификаторы для переменных оболочки, как: ч,
которая упадет последний элемент имени пути,
или: г, которая упадет расширение.
Те, в настоящее время относятся к переменным окружения тоже. Они не привыкли.
Раньше считалось, что они не могли быть изменены. Теперь они могут быть.
Это один из достижений с событиями оболочек на протяжении многих лет.
Я говорил, что снаряды в рамках сред
и переменные оболочки в C-оболочки являются, с некоторыми исключениями, отдельных наборов.
Вы можете установить переменную окружения и переменную оболочки с тем же именем.
Они будут различные переменные, они могут иметь разные значения.
Изменение значения одной не изменит значение другой.
Эти переменные все оценивается со знаком доллара - $, $ что угодно.
Так что если у вас есть это? Знаете ли вы, какую из них вы получите?
В моих тестах я получил переменной командного,
но это не была документирована, и вы не можете полагаться на это.
Поэтому я прошу вас, создает оболочки и переменные окружения
с теми же именами хорошая идея? Кол-Хорошо.
Что это за основные исключения, в которых переменные среды и оболочки
связаны друг с другом?
Есть эти 4.
Переменная окружения TERM буквы,
оболочки переменной термин маленькими буквами, типа эмуляции терминала.
Я просто собираюсь перейти на здесь, и я буду делать эхо, полезную команду здесь,
$ СРОК $ термин. И есть.
Xterm это соединение для окон, отображаемых в X Window System.
Xterm-цвет является разновидностью того что позволяет различные цвета.
Почему мы определяем эти? Что это хорошо для?
Команды, которые переставить экран, как редактору
отправить особые последовательности, называемые управляющие последовательности,
к терминалу или окно, чтобы изменить его и так далее.
Эти последовательности различны для разных типов терминалов.
Это говорит его, какие из них использовать.
Иногда бывают проблемы там.
Возможно, вы захотите, чтобы изменить это.
Если что-то не работает, иногда тип терминала установлен неправильно,
Вы можете быть в состоянии исправить, переопределив термин переменную.
В этих случаях, меняя одну переменную, переменную окружения или переменной командного,
должны изменить другого.
Я обнаружил, через опыт, что изменение СРОК заглавными буквами
не всегда изменить переменную термин оболочки маленькими буквами.
Это ошибка.
Я не знаю, если это всегда так. Большую часть времени это не так, но это может быть.
Так что если вы внесли изменения, просто проверить это.
Это не часто, что вам нужно изменить это значение, но раз в то время, что вы делаете.
Переменная среды USER.
Опять же, переменная окружения заглавными буквами, выложить переменную маленькими буквами.
Это ваше имя пользователя.
Это только при исключительных обстоятельствах
что вы хотели бы изменить это.
Если ваше имя пользователя кто-то другой, он может бросить все виды вещей прочь.
Домашний каталог, домашний каталог пользователя.
Опять же, вы не хотели бы, чтобы изменить это.
Обратите внимание, во всех этих случаях и тот, который мы собираемся покрыть, переменную пути,
Переменная среды является заглавными буквами и связанная переменная оболочки маленькими буквами.
При изменении одного, вы должны изменить другого.
Этот вид связывания не может быть установлена ​​как вы не можете связать 2 переменные,
кроме них 4 и связывание в этих переменных не может быть отменено,
вы не можете их разделить.
Таким образом, эти 4 пары переменных связаны.
Они всегда будут. Ни другие будут.
Кроме того, можно было бы создавать переменные с одинаковыми именами
противоположных типов.
Вы можете сделать переменная командного процессора термин маленькими буквами
или переменная окружения TERM заглавными буквами.
Эти переменные не зависела бы от этих парных переменных
и они будут независимы друг от друга.
Я не могу себе представить, почему вы могли бы сделать, что если вы не хотите, чтобы запутать людей.
Вот эта вот, переменная путь, это действительно важный.
Другое дело в том, что могут быть случаи,
переменных с аналогичными парных имен, не связанных друг с другом.
Там могут быть переменными, корпуса и оболочки, в больших и маленьких букв.
На основе этого имени, вы не знаете, если у этой переменной является переменной оболочки
или переменную окружения, и они не связаны друг с другом.
Так что вид парных имен не означает связанных переменных.
Переменная путь, который я показывал раньше,
это список имен путей, в которых оболочка ищет команды.
Давайте вернемся к этому окну здесь и мы сделаем Эхо $ PATH, заглавные буквы -
Переменная среды - эхо $ пути, маленькие буквы - оболочки переменной.
Обратите внимание, что список каталогов является то же самое. Они обязаны.
Измените один, вы изменение другого.
В переменной окружения элементы разделяются двоеточием. Обратите внимание, что.
Переменные оболочки отделяются пробелами.
Эта переменная окружения является одна строка.
Переменная оболочки является массивом.
Оболочка Борна не было массивы.
Bash делает, но это уже фиксированной частью оболочки.
Это одна строка, а не массив.
C-оболочки всегда массивы.
Массивы гораздо легче работать.
Вы можете обратиться к его части.
Так эхо $ путь [1], и я получаю / USR / бен, первый элемент.
Опять же, помните знак доллара обозначает последний элемент списка истории.
Что там происходит? Это пытались найти знак доллара в качестве переменного символа.
Я избежать ее. Ой. Это не займет, что либо.
Некоторые из этих вещей не работают так хорошо.
Может быть, мы просто оставить это.
Asterisk относится ко всему этому, но это то, что вы получите, если вы не укажете элемент.
Еще один способ, который в массивы можно манипулировать,
число элементов там, 7 элементов.
Здесь мы ставим знак решетки перед именем переменной.
Вот еще одна. Поставьте знак вопроса там.
То есть логическое значение. Это означает, что переменная существует.
Это еще один способ работы с переменными.
Это, кстати, не обязательно должен быть массивом.
Это может быть любая переменная.
И если я делаю, нет такой переменной, и я получаю 0.
Еще мелочь там о переменных оценок.
Вернуться к этому здесь, если по каким-то причинам вы хотели работать с этим
вместо того чтобы работать с массивом, переменная оболочки,
Есть команды, которые могут отделить эти вещи на основе толстой кишки.
В самом деле, если вы собираетесь делать это в Bash оболочки возможно,
своего рода сценарий, это было бы, наверное, как бы вы это сделали.
Но в C-оболочки это гораздо проще использовать массив.
В Bourne оболочки, переменные назначаются одном выражении, как это,
нравится, как вы могли бы назначить переменную в языке программирования,
и здесь не должно быть пробелов.
Это необходимо, чтобы она была только 1 строка.
В оболочках Bourne типа, все переменные переменные оболочки.
Переменные окружения представляют собой подмножество переменных оболочки.
Они отличаются от переменных, не окружающей среды, экспортируя.
Команда сделать это экспорт, как экспорта ПРИНТЕРОМ.
Если бы мы были определить такую ​​переменную,
если бы мы хотели команду печати, чтобы найти его, он должен был бы быть переменной среды,
и вот как мы делаем это один.
Здесь есть что-то вроде запутанной.
Это выражение, экспорт в окружающую среду, происходит от этой концепции оболочки Bourne,
и все же, что выражение используется в описаниях С-оболочки,
где нет такой команды, как экспорт.
Если вы только что сказали экспорт сам по себе, вы получите список экспортируется -
Так что, если я просто экспортировать здесь, нет такой вещи,.
Хорошо, там мы идем.
Эти вещи, кстати, также определяются оболочки.
Я не определить ни одного из них сам.
Оболочка делает всякие вещи сам по себе.
Следует делать вещи автоматически.
В Bash или Korn оболочки, вы можете запустить команду, как это,
которые будут осуществлять как присвоить переменной значение и экспортировать его в 1 команды.
В оболочке Bourne они должны быть отдельные команды, как экспортировать.
Вот еще один аспект, который сбивает с толку.
Набор команд в C-оболочки определяет переменные
и без аргументов говорит вам, что значения переменных являются.
В Bash оболочки, набор команд без аргументов делает то же самое,
но с аргументами он делает совсем другое.
Таким образом, эти различные аргументы здесь.
Некоторые из них являются переменными среды, некоторые из них являются переменными командного процессора.
Все они переменные оболочки действительно. Некоторые из них являются переменные среды.
Набор команд с аргументами могут быть использованы для работы
на позиционных параметров в скрипте,
который является способом получения их все сразу.
Мы не можем идти в этом сегодня.
Он также может быть использован для изменения поведения оболочки.
В частности, в Bash есть переменные, которые будут определять, как оболочка ведет себя.
Тогда и только в этом одна команда, что вы могли бы видеть, эта команда.
Набранную затем переменных и типов переменных используется в оболочках Korn и Bash.
Это не обязательно, но она может быть использована для ограничения значений переменных,
что может быть полезно для предотвращения ошибок, и это достаточно часто.
Так что я просто отметить, что в случае, если вы видите его где-нибудь.
Команда, где.
Помните, я упоминал ранее, где команда в C-оболочки,
которые могут рассказать вам о местонахождении командной пути.
Вот подстановки команд.
Вы должны найти на клавиатуре где-то символов, выглядит следующим образом.
Расположение на клавиатуре будет варьироваться.
Мы назвали это обратная кавычка. Это о размере цитаты.
Это идет от верхнего левого до нижнего правого.
Здесь, на мой Mac клавиатуры это в левом верхнем углу.
Этот герой может быть использован для выполнения команды внутри команды.
Если у вас есть выражение внутри кавычек,
что выражение является командой, этим управляет.
Выход из этой команды
Затем заменить выражением BACKQUOTE всей
внутри длинной команды, которые затем бежит с этого выхода
в рамках своей строки аргументов и так далее.
Вот команда, которая использует это.
Давайте продемонстрируем работу здесь.
Пойдем здесь, вынуть обратные кавычки.
Контроль получает меня в начале строки с синтаксисом редактирования Emacs.
До сих пор имена путей является то, что при чем тут,
но когда я делаю это так, то тогда подключается в этом списке имен путей
вместо всего этого выражения BACKQUOTE и работает LS-L на них.
Вид удобно, да?
Так вот один приятная вещь. Вот как обратные кавычки работать.
Теперь давайте немного дальше.
Это псевдонимы. Я на самом деле использовать их.
Я постараюсь получить это в с 1 операции редактирования.
Хорошо.
Теперь давайте посмотрим, как эти определения вышел.
Псевдоним LWH рассказывал мне, как он определен.
Обратите внимание, что это только в этом, но внешние котировки были сняты
и восклицательный знак снимается.
! *, Полный список всех аргументов.
В определении псевдонима оно будет применять туда, где я использую это.
Д-Ш КШ Баш. Хорошо.
Посмотрите, как это работает? Это экономит мне несколько нажатий на клавиши.
Пойдем немного и это лишь что-то еще здесь.
Обратите внимание, здесь эти различные снаряды. Я должен был об этом раньше.
CSH имеет 2 над здесь и так же / Bin / Tcsh.
Мы могли бы создать с помощью других средств, что те, на самом деле тот же файл.
Помните, я говорил, если вы введете ш вы получаете Баш.
Введите это, и вы получите это.
Но те, которые не связаны между собой. Те есть одноместные там.
И это не тот файл, который может вызвать еще один.
Итак, это отдельные файлы; C-оболочки из них тот же файл.
Вернуться сюда, другой здесь, это псевдоним,
обратите внимание, что это выполнения этой команды файл.
Это псевдоним работает это. Файл говорит вам тип файла.
Так FWH КШ Баш. Хорошо.
Вот вывод команды файла.
Я не знаю, если вы знаете, что это значит здесь,
Macho-универсальный двоичный с 2 ​​архитектур.
Есть 2 возможных типов процессоров в Mac,
и некоторые программы были написаны, чтобы иметь возможность работать с обоими,
и командный файл может определить, что, так это то, что это означает.
Оба этих файла были написаны таким образом.
Итак, мы видим, как работает псевдоним, мы видим, как работает обратная кавычка,
мы видим, как фактические Ls файлов или файлов работает.
Это может не сработать. Попробуйте ", где, где" и "Д-Ш, где". Хорошо, давайте попробуем это.
где, где.
где это оболочка встроенный.
Запомнить ранее мы показали, что Bash не было куда.
Если вы наберете, где в Bash оболочки, вы получите сообщение об ошибке.
Это просто часть оболочки вместо того, чтобы отдельная команда.
Что произойдет, если я печатаю LWH ищете, где? Посмотрите, что происходит там.
Ран, где, где, получил этот выход, а затем попытался запустить Ls
как л о том, где это оболочка встроенный.
где есть, но другие не существуют.
Ни один из них не существует, на самом деле.
Так что не всегда работает, и это также показывает, как некоторые вещи
не делать совсем то, что вы могли подумать.
Пойдем немного дальше здесь.
Это вот в Bash. Это также замена команд как обратной кавычки.
Но в отличие от обратной кавычки, он использует эту переменную стиль.
Есть целый ряд выражений, которые начинаются со знака доллара,
и в то время это не переменные, они заимствовали использование знака доллара
чтобы указать выражение какой-то.
Это может быть в круглые скобки или скобки или двойных круглых скобках,
которая имеет свое назначение.
Холост скобки здесь подмена команда так же, как обратные кавычки.
Двойные скобки на самом деле арифметическая операция.
Есть и другие варианты синтаксиса, другие операции.
BACKQUOTE синтаксис доступен в Bash.
Однако, этот является предпочтительным. Это гораздо легче читать, и это позволяет вложенности.
Вы можете иметь внутри $ (команда) другую команду,
что-то вроде -
Получить список есть.
Это будет работать, если у меня было командного процессора также.
Что делать, если я хочу сделать что-то вроде -
Вы, вероятно, не будет на самом деле использовать эту команду,
но эта внутренняя замена команд перекликается имена всех файлов, начинающихся с,
то это одно бежит LS-л этих файлов,
а затем этот просто повторяет вывод.
Вы, вероятно, не будет делать это, вы бы просто сделать эхо или Ls,
но это показывает, как вложение команд работает.
Так что просто еще одна особенность здесь.
Я сказал об этом раньше, что, когда у вас есть, где в С-оболочки,
введите работ в оболочках Bourne типа для размещения команд.
Встроенные команды, только то, что я говорил там.
Команды являются частью оболочки, как, где.
Когда оболочка выполняет команду, как Ls, он находит его через пути,
находит его в какой-нибудь каталог где-то,
говорится, что в память, создает новую оболочку,
читает команду Ls или что в оболочку
где переменные окружения уже находятся,
а затем передает выполнение к нему.
Встроенный команды, код для этой команды находилось внутри корпуса,
так оболочка просто начинает выполнять часть своего кода.
где такая команда. Это на самом деле становится все быстрее.
Он не имеет читать ничего в памяти, это уже в памяти.
Встроенные команды всегда имеют приоритет над командами с тем же именем.
Команды, которые находятся в каталогах на пути может иметь то же имя,
Команды в разных каталогах, файлы в разных каталогах.
Тот, который происходит в начале пути, который вы получите.
Если есть встроенный команда, вы всегда получите его.
Там нет никакого способа, чтобы придать ему более низкий приоритет, чем команды в пути.
Если вы хотите получить эту команду путь, вы можете ввести полный путь.
Если бы не было команды, где на пути куда-то,
можно ввести / бен /, где и вы получите его.
Если вы не хотите набрать весь путь, вы могли бы определить псевдоним.
В самом деле, если вы дали псевдоним то же имя, встроенного в команде, он будет работать
потому что определение псевдонима оценивается
до оболочка определяет, что это встроенный команда, которая должна быть выполнена.
Тогда это становится немного сложнее с некоторых команд здесь.
Случай некоторых команд фактически встроенных команд и в пути.
Одним из них является эхо, команда, я просто использовал некоторое время назад в этих примерах.
Эхо это команда на пути, и это в любой оболочке.
Они не обязательно все ведут себя так же.
Первоначально он был единственной командой в пути.
Он был построен в в оболочках позже.
Потому что есть варианты, которые зависят от окружающей среды
и параметры командной строки, встроенные команды
были написаны, чтобы функционировать так же, как в команде, которая была в пути,
это вряд ли бы они были написаны таким образом
если команда еще не были написаны для пути.
Таким образом, это имеет побочных эффектов. Его история имеет последствия здесь.
Есть варианты там.
Там также вариант определяется переменной в Tcsh называемой echo_style.
Это одна из этих переменных, которые могут изменить способ, которым эхо работ.
Есть и другие случаи, в которых можно присвоить переменную
что изменяет способ, что операция оболочки, в том числе встроенной команды, работает.
Это ничего не повлияют
так как другие команды не имеют доступа к переменным оболочки,
только переменные окружения.
Но операции оболочки можете прочитать переменные оболочки.
Это не будет работать для CSH. Вот только Tcsh. Это одна из усовершенствований.
Разбор имеет последовательности, когда он оценивает метасимволы,
когда он оценивает переменные, псевдонимы, ссылки истории.
Там в частности последовательность для этих вещей.
Если это делает вещи в определенной последовательности
и попадает в чем-то, что является выражением своего рода
который уже был оценен, он не будет оценивать его снова.
Если он делает это, то это будет просто передать персонажей.
Так что, если оценка некоторых выражений, как подстановки команд
или переменной или что приводит к выражению
которые вы хотели бы быть оценены,
что будет работать только если что оценка происходит позже в последовательности.
Я надеюсь, что я быть ясно, что.
Эта последовательность разбора, операция в С-оболочки,
не то же самое для встроенных команд, так и для не-встроенных команд.
Я не уверен, о Bash там.
Например, если переменная оболочки произвел ссылку на историю,
он, вероятно, не вернулся бы в истории.
Было бы просто получить восклицательный знак.
На самом деле, мы можем просто попробовать, что прямо сейчас.
множество А = и мы должны будем сделать это в там.
Ой, подождите. Извините. Я сделал это в Bash. Я хотел сделать это здесь.
Смотрите, так что это не оценить, что ссылку на историю
потому что это было уже прошли точку оценки истории выражения
когда он оценивается переменную.
Так вот 1 эффект разбора.
И снова, встроенные команды не делаются таким же образом.
Хорошо. Пойдем к следующему здесь.
Это сделано для того, чтобы быть 1 линия, но это делает его более удобным для чтения.
Что это делать?
Можно вспомнить, что мы можем оценить звездочки, как в имени файла групповых символов,
Есть и другие имя файла специальные символы, такие как знак вопроса и кронштейна выражений.
Такого рода оценки называется подстановка.
установить noglob в начале этой команды говорит, не делай этого.
задана noglob говорит вернуться к делать это.
Обратите внимание, что набор шар не будет иметь такой эффект.
На обычном языке, установите шар или отключенное noglob, казалось бы, эквивалентны,
но здесь это не так. Это не задана noglob.
Теперь TSET. TSET стоял терминального множества.
Это не использоваться, что часто сейчас, но до оконной системы стали доступны
и у вас один терминал, вы, возможно, придется определить тип.
И если что-то идет над Ethernet или от сети,
вы можете сказать, что это VT100.
VT100 это своего рода стандартом в терминального бизнеса. Оно происходит от терминала декабря.
Если вы просто сделать диалап - заметить, что? Это восходит есть способы, да?
Так что, если мы просто TSET здесь,
если я просто делаю TSET, это сброс мой терминал, но вы ничего не видел.
Это действительно не изменить ничего.
-Ы
Хорошо.
SetEnv СРОК Xterm-цвет.
Мы уже знаем, что термин был установлен таким образом, так, чтобы не изменить.
Вот так мы хотели бы это сделать.
Но обратите внимание, что эта команда, TSET-с, только выходные эти команды. Это не запускать их.
Это не выполнения этих команд, это выводить их.
Так что это предназначено для производства команд, которые затем будут выполняться.
Вы помните команду в этом файле я просто показал вас был Q в нем.
Так давайте сделаем это.
Вопрос подавляет некоторые выходные, но это не имеет значения здесь, как вы можете видеть.
Я просто делаю, что показать вам, что это не имело значения.
Это в синтаксисе BACKQUOTE.
Обратите внимание на командного процессора здесь, обратная кавычка здесь.
Я опускаю эти вещи здесь.
Эти случаи говорю ему, что делать
в случае определенных типов терминалов -
Локальную сеть, сеть, коммутируемого доступа, что там у вас.
Это не имеет значения здесь, потому что мы на самом деле не делает любой из этих вещей.
Я просто иллюстрирующий команду.
Если я сделаю это с обратной кавычки, что я собираюсь получить?
Также обратите внимание, что эта включала набор noglob и отключенное noglob,
так что те, теперь нет необходимости в определении.
Это не всегда было так, но теперь они включены в эту команду.
Но давайте посмотрим, что произойдет, если я могу это сделать
и перейти к началу строки с управления А и я могу это сделать.
Хорошо, установить: Команда не найдена. Вот отчасти странным, не правда ли?
множество является известный команда. Это часть оболочки.
установить: Команда не найдена? Почему это происходит?
Хм. Ну, давайте подумаем об этом.
Это работает командную замену BACKQUOTE,
и что происходит в определенной части последовательности разбора команды.
множество является встроенный команда.
Так к тому времени, это делает эту команду замены,
это уже получил за точку идентификации встроенных команд.
Так он рассматривает установить, как будто это команда на пути.
Само собой разумеется, он не находит его, и вы получите сообщение об ошибке.
Ну. Там в пример последовательности анализа.
И что же нам делать по этому поводу?
Обратите внимание, это очень интересный команду здесь, Eval.
Интересно, что это делает.
Если вы посмотрите на руководстве - и давайте просто делать, что
чтобы показать, как заблуждение эти пособия являются -
человек Tcsh, путают руководство, чтобы найти вещи здесь не просто либо.
Здесь мы идем, Eval аргумент, так что мы можем иметь 1 или более аргументов
и есть список вещей там.
Лечит аргументы в качестве вклада в оболочку
и выполняет полученные команды в контексте текущей оболочки.
Это обычно используется для выполнения команд, генерируемых в результате команды
или замена переменной, потому что анализ выполняется до этих замен.
Очень хорошо.
И вот они даже приведена в описании команды TSET для использования образца
как тот, который я только что показал вам.
Теперь у меня есть, чтобы получить окно обратно полезного места.
Давайте сюда и мы увидим, что Eval используется как раз перед этим.
Итак, давайте посмотрим, что произойдет, если мы ставим - здесь мы идем в ногу со стрелками в этой команде
и управления в начале, Eval.
Ладно, так это работает.
Когда вы делаете Eval, она занимает, что будет после него, и делает его команду.
Это позволяет существенно разобрать его в два раза.
В разделе здесь запускает эту команду внутри кавычек,
получает выход.
Выход, как предполагается, работает как этих команд здесь, как это
на этот и этот.
Так что те команды, теперь здесь, в этой последовательности,
но они встроенных команд, и это не может получить их прямо сейчас.
Так мы идем в оце, Eval берет, что до, начинает все это снова и снова, и она работает.
Примером оба backquoting, Eval, разбор, последствия разбора,
и команда, которая, вероятно, очень мало пользы для вас в настоящее время.
Хорошо. Ладно, Umask.
Давайте посмотрим на эту команду здесь, UMASK 022. Интересно, что это делает.
Давайте просто введите Umask ни с чем после нее. 22. Хорошо.
022 и сделать это снова.
Как вы уже догадались, Umask без аргументов говорит вам текущую маску;
UMASK с аргументами делает это, но это был тот, у меня уже был.
Что 022 значит?
Это здесь ограждения для файла.
Они определяют, кому разрешено читать, ни писать или выполнять файл.
Защита также называют разрешения.
С обозначает для чтения, в Вт для записи,
и х, который не присутствует там, выступает за выполнение.
Есть 3 категории там.
Последние 3 элементы находятся в категории пользователей. Те, обратиться ко мне, пользователю.
Эти 3 здесь относятся к группе.
Файл принадлежит 1 группы, пользователь может состоять в нескольких группах,
но если пользователь находится в группе, к которой этот файл принадлежит,
то такая защита будет обращаться к нему, если он не пользователь.
А это все остальные.
Эти категории являются взаимоисключающими.
Защиты пользователей обращаться к нему,
средства защиты, группа распространяется на членов группы, кроме пользователя,
и другие средства защиты применяются только к другим, чем пользователь и членов группы людей.
Если есть г или AW или х, это означает, что защита предоставляется.
Если есть дефис, это означает, это не так.
Там на самом деле и другие вещи, которые можно ставить в здесь кроме них,
который я не буду вдаваться в настоящее время.
Umask определяет значение по умолчанию для файлов, которые вы создаете.
И в качестве маски, в основном это говорит биты, которые вы не установили.
Как это стало бит?
Если вы думаете о каждой из них как восьмеричное число,
это 1с немного, это и есть 2s, это 4s.
Так от 0 до 7
опишу то, что сочетание R ', ж, и иксы у вас есть для этих 3
а затем такое же количество для них, а затем для них.
Так 022 означает 0 для друга, 2 для группы, 2 для пользователя.
Но это маска. Маска это то, что вам не придется.
Мне очень жаль. Я просто дал вам вещи в неправильном порядке.
Это первый 3. Эти 3 являются пользователь, эти три являются группой, эти три являются другой.
Извините, что я дал вам это в неправильном порядке.
0, который является первым из них, не отображать значение,
но если номер не существует, это 0.
Это означает, что все 3 из них будет разрешено.
Обратите внимание, что в данном конкретном один х не допускается.
Причина в том, что оболочка может определить
является ли файл должен быть выполнен или нет.
Так как это не является исполняемым файлом, он не ставил х.
Эти 2 средства, которые пишут разрешение, вторую категорию здесь,
один в середине, будет отказано.
Итак, еще раз, это те вещи, которые он отрицал.
Ну, х допускается, но это не здесь, потому что это не исполняемый
и аналогично для других.
Так что это общая Umask.
Другой распространенной является 700 - дать себе все и никто другой ничего.
Есть и другие возможности.
Я вернусь к этому. Использование историю я могу поиск назад для того, LWH туда.
Хорошо. Так вот, эти снаряды.
Bash, владелец, который является системная учетная запись, можно сделать все.
Группа и все остальные могут делать читать или выполнять, но не писать.
Это один даже не позволит владельцу писать в него.
Если владелец хотел написать к нему, системной учетной записи,
ему придется изменить защиту в первую очередь.
Но, опять же, берутся биты устанавливает значение по умолчанию путем его маскировки,
, указав биты, которые не будут установлены.
Это, как правило, в одном из ваших файлов инициализации, который является. Cshrc для C-оболочки
или. профиль для оболочек Bourne типа.
Это может быть в другом месте также, если есть другие файлы инициализации в системе.
Во всяком случае, это Umask.
Там-то отчасти странным здесь,
и это, почему одна команда для этого есть?
Если бы я писал это, я хотел бы сделать это переменная, Umask = некоторое значение.
Почему существует целая команда только для этой цели?
Причина это просто восходит к истокам Unix.
Unix был лишь некоторые программирования проект в Bell Labs в начале 1970-х.
Люди просто собрались вместе, чтобы программы.
Они никогда не намеревался, чтобы он стал во всем мире операционной системы.
Разные люди писали разные части, не думая очень
о том, как они собираются использовать - а отрывочны.
И сложилось так, и это все еще как, что в некоторых отношениях.
Так что отражает историю, и есть еще эти несоответствия и нечетные элементы из него.
Хорошо. Следующая один здесь.
Как я уже писал ранее, C-оболочка действительно не используется очень много для программирования,
хотя это может быть.
Он выполняет медленнее, снова компромисс между интерактивного использования,
который имеет больше обработки, участвующих чем скорость,
которые могут обойтись без обработки.
Дополнительные функции, добавленные в оболочку Bourne по Korn и Bourne-Again оболочек
кажется, не замедлит их, и я не знаю, почему это так.
Это может быть просто лучше программирования, но я не в состоянии знать.
Скорость здесь на самом деле не такое уж большое дело, хотя оно упоминается.
Причина в том, что сценарии оболочки на самом деле получить довольно быстро.
Если есть много команд, как в расчетной программе,
Вы, вероятно, не будет делать это в сценарий оболочки.
Операции есть довольно прост и понятен.
Те, которые я испытал, которые слишком медленно
являются: настойчивые применения медленных команд.
Ранее я упоминал редактор потока СЕПГ. Эта команда является медленным.
Если выполнить SED много раз, вы получите медленный сценарий, но это не оболочка, которая медленно.
Запуск его в Bourne оболочки не будет намного быстрее, чем при запуске его в C-оболочки,
хотя есть, может быть, некоторые преимущества есть.
Дополнительные возможности программирования, с другой стороны,
значительные причины, почему вы должны использовать снаряды Борна типа.
С-оболочка имеет нечетные функции к нему -
тот факт, что вы не знаете, если переменная является переменной оболочки или переменную окружения.
Это может быть очень запутанной.
Это не так легко писать
только на основе вашего опыта программирования на других языках.
Я думаю, что вы можете обнаружить, снаряды Борна типа более последовательным с вашим опытом.
Некоторые сценарии, хотя, может быть тысячи строк в длину.
Те, что я видел используются для исправления операционных систем.
Те, может выполнять очень медленно, но вы не столкнетесь тех, очень часто.
И только когда вы делаете исправлений,
и это только системный администратор, который делает те вещи,
так что это не действительно большая часть проблемы.
Те, которые являются сотни строк долго на самом деле выполнить довольно быстро.
Упоминание это здесь, каковы эти усовершенствования?
Я уже упомянул некоторые из них - массивы, расчеты,
в $ () выражение для расчетов в Bash оболочки,
другой вид подстановки команд.
Существуют различные виды команд тестирования
, с помощью которого вы можете сделать условные тесты на существование файла или других вещей.
Здесь в последний раз, эта команда здесь.
Что это делать, и почему бы кто-нибудь его использовать?
printenv VariableName.
Мы знаем, что printenv делает. Это говорит нам, что значение переменной.
И printenv VariableName не скажет нам очень много, потому что нет такой переменной.
Бланк.
Но давайте дадим ему что-то значимое.
Это не там также. Хорошо. Я думаю, я никогда не определял, что.
Давайте просто проверить мое окружение.
Это другая команда, с помощью которого можно проверить свое окружение.
Существует старый добрый редактор, который мы видели раньше.
Что это делать?
Здесь у нас есть выражение BACKQUOTE.
Помните, что это С-оболочка.
Так printenv РЕДАКТОР даст нам значение EDITOR. Это VI.
А потом он установит это значение для переменной а, задающей команды.
Так что теперь, если я делаю эхо $ а, я получаю VI.
Это не кажется очень полезно.
Тем не менее, на самом деле есть цель.
Поскольку мы не знаем, является ли переменная переменной оболочки или переменную окружения
, используя синтаксис оценки знак доллара, мы можем использовать printenv
чтобы убедиться, что это переменная окружения.
Так, если бы существовал редактор переменной оболочки, этого бы не получил его.
Это работает только с переменной окружения.
Если бы не было переменная оболочки, и я хотел его значение,
Я должен был бы найти какой-то другой способ сделать это.
Один из способов сделать это было бы, делая набор и трубопроводов.
Это один из метасимволов, специальных символов.
Он посылает выход набора на что-то другое.
Давайте посмотрим, что мы могли бы найти там.
Ничего. Хорошо. Давайте просто посмотрим, что там все вместе.
Это было echo_style, тот, который я упоминал ранее. Хорошо, давайте сделаем это.
Помните, я упоминал ранее, echo_style
определяет способ команда эхо будет работать.
BSD означает Беркли стандартную поставку.
Это Беркли Unix с 1970.
Вот один из способов, которые повторяют может работать.
Установка echo_style к этому значению в TC-оболочки вызовет эхо вести себя таким образом.
Так установлено делает это, но установить получает только оболочку переменных.
Это не было бы найти редактор, который не является переменной оболочки.
Ничего.
Так вот один из способов отличить их.
Но то, что вы должны пойти по какому-то странному командой типа, что
различать переменных оболочки или переменных окружения
показывает вид непрактичным природе С-оболочки для некоторых целей.
И теперь, в прошлом и, возможно, не менее, это тот человек, страницы.
Те, кто вы, возможно, знаете, человек это команда сокращение от руководства.
Страницы руководства оболочек трудно читать. Они очень долго.
Они организованы таким образом, что может сделать его трудно найти то, что вы ищете.
Так что если вы ищете что-то с определенной целью,
Вы не можете знать, если эта цель является переменной оболочки или что-то еще,
так что вы не можете знать, где искать.
Вы можете искать различные строк, но строки часто повторяются.
Так что это, как правило трудно читать.
Мы просто смотрели на справочной странице TC-оболочки немного до найти команду Eval.
Некоторые дела идут быстрее.
Один из подходов заключается в поиске строку.
Вы можете использовать пейджер.
Пейджер имеет косую черту, чтобы искать команды или строки внутри операции пейджера.
Человек по умолчанию будет использовать пейджеры, либо быть более или менее.
Я не знаю, если вы знакомы с теми,, но те, может показать файлы по кусочкам.
Я использую меньше показать эти конкретные файлы у нас здесь.
Вы можете искать внутри есть.
Вы можете попробовать использовать различных строк поиска.
Также мужчина страниц в разных операционных системах не могут быть одинаковыми.
Они могут быть отдельные страницы для CSH и Tcsh.
Они не находятся на Mac, но они могли бы быть, если те отдельные команды.
Если ш действительно не называть Bash, там, вероятно, будет отдельный человек страницу.
Некоторые системы имеют отдельные справочные страницы только для C-оболочки встроенных команд.
Иногда, если вы хотите прочитать описание встроенной команды
вот и в пути, как эхо, вам необходимо прочитать справочную страницу на этой команды на эхо
чтобы определить, как он будет работать в качестве встроенного в команде
даже если вы не вызвав встроенную команду.
Это недостаток операционной системы в целом, а не только для оболочек,
хотя для оболочек, в частности, страницы человека довольно долго,
отчасти потому, что они добавили полезные функции к ним, которые могут быть положительным.
Хорошо. Есть ли вопросы? Любые темы, которые вы хотите воспитать?
Все, что отношение здесь?
Ну, это было очень приятно поговорить с вами.
Я надеюсь, вы получили что-то из этого семинара
, которые будут полезны для вас в ваших начинаниях.
[CS50.TV]