>> [Seminarium - Powłoki Unix, Środowiska]
[Douglas Kline - Harvard University]
[To jest CS50. - CS50.TV]
>> Dzisiejszy temat to powłoki Unix.
Jestem Douglas Kline, ekspert, lub przynajmniej racjonalnie właściwy użytkownik, skorupy.
Shell jest interfejs użytkownika do systemu operacyjnego komputera.
Nazwa jest myląca, gdyż w odróżnieniu powłoki zwierzęcia,
który jest twardy i ochronne, powłoki komputer umożliwia komunikację.
Tak porowata membrana będzie prawdopodobnie lepsza metafora.
>> Oryginalna powłoka dla systemów Unix jest powłoka Bourne.
Bourne jest wpisany B-O-U-R-N-E.
Bourne był jednym z pierwszych autorów Unix,
a więc powłoka jest nazwana jego imieniem.
Nazwa tej powłoki jako polecenia jest po prostu sh.
To polecenie można wykonać.
Shell rozpoczyna się logowanie.
Po zalogowaniu się do komputera, zaczyna biec tylko powłoka dla ciebie,
i to, co ma swoje polecenia.
Można go uruchomić również w innych terminach.
Jeśli wprowadzą się okno z żadnym innym wskazanie, rozpocznie powłoki dla Ciebie.
To jak to jest, że można przejść do okna i rozpocząć wpisywanie poleceń
i tak dalej, tam, nawet jeśli nie udało się zalogować do tego okna.
Ponadto, jeśli nie jest zdalne logowanie,
następnie rozpocznie powłoki na komputerze zdalnym.
I to jest możliwe do wykonywania poleceń bez interaktywnej powłoki.
Może oznaczać, że w ramach swojej bieżącej działalności,
a to może oznaczać także zdalne sterowanie.
Można wysłać polecenie do innego komputera,
która obejmuje uruchomienie powłoki tam.
W istocie, musi ona zawierać uruchomienie powłoki tam
nawet jeśli nie jest to twój ostateczny cel.
Kiedy coś zaczyna się tak, że nie musi rozpocząć nową powłokę.
Jeśli wprowadzą się nowe okno, jest to możliwe, aby poinformować go, aby otworzyć edytor
lub inne polecenie.
W tym przypadku, edytor rozpocznie się od nowa.
Gdy edytor kończy okno końca.
To jest trochę nietypowa, ale można to zrobić.
W tych przypadkach nie będzie powłoki.
Więc nie jest to regułą, że przyniesie okno lub niektóre takie zastosowanie się powłokę.
>> Shell przetwarza polecenia.
Parsowanie oznacza identyfikację poszczególnych elementów i ich klasyfikacji.
W poleceniu, kompletny ciąg, który należy wpisać,
będzie się wykonywane 1 lub więcej pojedynczych polecenia.
Inne elementy mogą być argumenty.
Nie mogą być również znaki specjalne, które mają wpływ na wykonanie polecenia.
Mogą wysyłać wyjście gdzieś inny niż ekran
jeśli komenda normalnie wysłać go do ekranu.
To może przekierować wejście i może robić inne rzeczy też.
Istnieją różne inne symbole, znaki, i tak dalej.
Parsowanie wykrywania i interpretacji tych rzeczy.
>> Teraz, jeśli nie ma więcej pytań, co jest dość prawdopodobne, ponieważ nie ma więcej osób,
pójdziemy na kolejnej stronie tutaj.
>> Powiedziałem wcześniej, że powłoka Bourne'a jest uruchamiana powłoka.
Są inni.
Jednym z nich jest C-shell. Polecenie to jest csh.
Nazwa C-shell to tylko gra słów.
Powłoka ta została wprowadzona z Berkeley Unix w połowie 1970 roku.
Berkeley Unix było przełomowe wydarzenie w rozwoju systemów Unix.
To była ogromna rewolucja i obejmowały wprowadzenie tej powłoki.
Powodem tej grze słów, C-shell,
jest to, że C-shell ma pewne cechy, które przypominają w nim języka C,
który nie posiada Bourne shell -
lub że nie ma w tym czasie.
Istnieje również TC-shell.
To jest rozszerzeniem C-shell.
Posiada dodatkowe funkcje, z których wiele jest przydatne do użytku interaktywnego,
takich jak odwołania polecenia w mechanizmie historii,
które opiszę nieco później -
w prosty sposób, wzorowany edytorze.
Ma też powiązania, które pozwalają powiązać krótkiego klucza ciąg dłuższy polecenia.
Nie zamierzamy być miejsce, które dzisiaj.
Ma kilka funkcji, które są przydatne do programowania.
Jednakże, C-powłoka nie jest często stosowany do programowania powłoki.
Programy powłoki, jeśli nie już wiem,
programy, które składają się właściwości powłoki.
Można uruchomić je jako programy.
Napisać kilka poleceń powłoki w pliku i uruchomić plik.
Nie trzeba go skompilować. To jest język interpretacyjny.
Zwrot C-shell jest niejednoznaczna, ponieważ to może odnosić się tylko do oryginalnego C-shell, csh,
lub do wszystkich C-muszli, włączając tcsh. To trochę dwuznaczne.
>> Później powłoka jest Korn, ksh, nazwany po programisty, Korn.
Powłoka ta próbowała wprowadzić do 1 Shell
zalety C-shell do użytku interaktywnego
i Bourne Shell programowania.
Jest on używany jako powłoka interaktywna przez niektórych ludzi - mniejszości.
Później jednak nie było innego wprowadzenie, powłoki Bash, bash,
znowu gra słów, Bourne-again shell.
To rozszerzenie powłoki Bourne. Korn jest. Obie z nich są.
Ma te same cele Korn z połączyła C-shell jest
i zalety Bourne Shell w 1 Shell.
Wiele ulepszeń płaszcza Korn są również zawarte w Basha.
Powłoki, jednak nie więcej, a zatem jest korzystne.
Bourne-again shell i powłoki Korn nazywane są pociski typu Bourne'a
ponieważ zawierają cechy powłoki Bourne'a,
które są niezgodne w niektórych aspektach z C-muszli.
Istnieją inne muszle oprócz tych, niektóre przeznaczone dla ograniczonego użytkowania,
może być ograniczone do niektórych poleceń, może dla celów specjalistycznych, nie często używane.
>> Ok. Następny artykuł tutaj.
Bash Shell stał związane z różnymi formami Linux.
Nie jestem pewien, czy to prawda każdej postaci.
Istnieje wiele form i tam nie mam je wszystkie używane,
ale w tym, że użyłem stało się z nią związanych.
O ile wiem, nie ma nic o Bash
co sprawia, że ​​bardziej kompatybilny z Linuksem
od innych kombinacji powłoki i systemu operacyjnego.
Myślę, że to prawdopodobnie tylko odzwierciedla skłonności programistów.
Że ma się związane z Linuksem, to kolejny powód, aby preferować Bash ksh
od rzeczy mogą być w nim napisane, a to może się rozprzestrzeniać.
Dam ci inne powody, że później.
Bourne skrypty powłoki powinny działać pod powłoki Korn lub Bash.
Jeśli piszesz coś dla powłoki Bourne,
prawdopodobnie można wykonać go pod ksh lub bash.
Skrypty powłoki Korn będzie prawdopodobnie pracował w Bash, ale nie mogę zagwarantować, że.
Później tutaj, skrypty powłoki C powinny działać pod TC-shell.
C-shell faktycznie nigdy nie szeroko stosowane w skryptach
od Bourne Shell, a później pociski typu Bourne'a były korzystne dla tego celu.
Tak, że naprawdę nie jest wszystko, co ważne.
Istnieje bardzo wiele skryptów powłoki Bourne'a, które zostały napisane dawno temu,
przed powłoki Korna i powłoki Bourne'a ponownie wprowadzono.
Te są nadal w użyciu, część systemów operacyjnych
i tak można je znaleźć, jeśli spojrzeć w system operacyjny
lub niektóre stare pakiety programowe.
>> Bash jest w pewnym stopniu staje się lingua franca rodzaju systemów operacyjnych.
To już rozszerzony do systemu Windows i VMS.
VMS, w przypadku której nie znasz, jest zastrzeżony system operacyjny
Digital Equipment Corporation, który jest nadal w użyciu, w dużej mierze za kulisami.
A jeśli to będzie działać na kilku różnych systemach operacyjnych,
prawdopodobne, że ludzie mają tendencję do zmiany na niej.
Ale ten rozwój jest stosunkowo nowe.
To dopiero początek, więc nie można przewidzieć, czy to okaże się, że naprawdę lingua franca rodzaj.
Ponadto, ponieważ ścieżki: plików i biblioteki różnią
między tymi różnymi systemami operacyjnymi
może nie być w stanie napisać skrypt bash na jednym systemie operacyjnym
a następnie uruchomić go na innym.
Powinieneś być w stanie przenieść go między innym Unix, Linux
Systemy operacyjne Mac OS, ale niekoniecznie do systemu Windows lub VMS.
Być może trzeba zmienić opis pliku ścieżkę dostępu,
i niektóre biblioteki mogą być różne,
które mogą mieć wpływ na sposób, w jaki niektóre polecenia pracy
lub w jaki sposób przetwarzać argumenty i jak.
Poza tym, drugi ostrożnie jest to, że nie ma gwarancji
że wszystkie różne muszle już wspomniałem - Bourne Shell, C-shell,
TC-shell, Korn, Bourne-again shell - będzie dostępna w każdym systemie Unix
Komputer lub Linux lub Mac OS.
Po prostu może nie być.
To jeden z tutejszych ostrożności.
To niefortunne ograniczenie tutaj od chcesz rzeczy do pracy wszędzie,
ale niestety, nie można powoływać się na to.
>> Ok. Następny tutaj.
Powiedzmy, że chcesz napisać skrypt powłoki,
Program składa się z poleceń powłoki.
Możesz napisać swoje polecenia, umieść je w pliku i uruchomić plik.
Co zrobić, jeśli chcesz dołączyć argumenty?
W przypadku operacji powłoki, argumenty są nazywane parametry lub parametry pozycyjne
i zostaną one nazywane przez dolara i numeru, $ 1, $ 2.
Więc jeśli skrypt ma tę nazwę, mój pierwszy argument może być argumentem 1
i moja druga może być argument, 2,
i w moim skrypcie, jeśli chcę odnieść się do tych rzeczy -
niech wymazać tego, ponieważ nie jestem naprawdę będzie go uruchomić -
w moim skrypcie mógłbym $ 1 odnosi się do arg1,
$ 2, która ukaże się w ten sposób, Arg2.
Więc te symbole dostępne w odniesieniu do argumentów są,
i te stosuje się do wszystkich powłok.
Ponadto, istnieją inne postacie.
$ * Odnosi się do całej listy argumentów, wszystkie z nich.
$ # Oznacza liczbę argumentów.
Ponownie, stosuje się to do wszystkich powłok.
Te symbole * i #, można stosować te znaczenia, także w innych miejscach.
Nie będziemy się w to.
>> Shell linia Specifier. Co to?
Powiedzmy, że napisałem skrypt, i to dla konkretnej powłoki i chcesz go uruchomić.
Skąd wiesz, co powłoki systemu operacyjnego będą używać, aby uruchomić skrypt?
W pewnym momencie można było zakładać, że będzie go uruchomić w powłoce Bourne
jeśli nie mówią inaczej,
ale ludzie nie są pisanie skryptów w Bourne Shell, że dużo więcej
i nie można nawet liczyć na, że ​​już.
Więc tutaj mamy linię specyfikatora powłoki tutaj.
Określająca Bash.
Należy zauważyć, że określa ją w ścieżkę, / bin / bash.
Jeśli komputer jest wyposażony w powłokę bash, ale nie w katalogu bin, / bin, to nie będzie działać.
To kolejna kwalifikator, inny ostrożność tutaj.
Znak funta jest charakter komentarz linia.
Odnosi się to do wszystkich powłok.
Szczególny przypadek tutaj, #! Na początku skryptu jest odmienny.
, Który określa, w którym powłoki, aby uruchomić skrypt.
Jak już mówiłem, to nie może być to samo miejsce / bin.
Ponadto, istnieje jeszcze coś tutaj.
Jeśli po prostu należy użyć znaku bez wykrzyknika i ścieżki,
Należy wskazać, że C-powłoka.
Jednak nie polecam robić, bo nie jestem w stanie zagwarantować,
że zawsze będzie działać.
Jeśli chcesz C-shell, lepiej byłoby powiedzieć tak.
Potem coś mylące tutaj.
W przypadku korzystania z linii specyfikator takich jak powłoki / bin / bash
i że powłoka nie jest dostępna tam,
nie ma czegoś takiego jak / bin / bash na danym komputerze,
albo dlatego, że nie ma Bash albo dlatego, że jest w innym miejscu,
dostaniesz błąd informacją, że skrypt został uruchomiony nie istnieje.
I oczywiście skrypt istnieje, tak, że komunikat o błędzie jest mylące.
Dlatego, że system operacyjny daje ten błąd
lub, bardziej precyzyjnie, że interaktywna powłoka, w której używasz to daje ten błąd,
jest to, że informuje, że polecenia użyty, co jest nazwą skryptu.
Że polecenie wywoływane powłoki o nazwie skryptu.
To gdzie masz ten mylący komunikat o błędzie.
Innym sposobem, aby wywołać skrypt
jest poprzez określenie powłoki w wierszu poleceń, jak tutaj.
To jest polecenie. Ten mówi, uruchom bash i następnie uruchomić mój skrypt w bash.
, Że ma pierwszeństwo przed linią specyfikującego,
i ten posiada funkcję pozwalając na zapewnienie różnych ścieżek.
Jeśli po prostu wydać polecenie, że system operacyjny będzie szukać tego polecenia
w różnych miejscach.
Jeśli jest to możliwe, powinno to znaleźć.
Komputer znajdzie Bash, gdzie jest położony i uruchomić go,
więc nie trzeba wtedy się martwić o to, gdzie znajdzie.
Istnieją inne obawy o potencjalnie,
a jeśli jest więcej niż 1 wersja Bash, co jest możliwe, choć mało prawdopodobne.
Więc to jest inny sposób na radzenie sobie z tych rzeczy.
Linie specifier mogą dzwonić żadnej powłoki.
Mogą również nazywać rzeczy inne niż muszle.
Mam tu przykłady są sed, który jest edytorem strumieni;
awk, który jest językiem przetwarzania wzór;
i Perl, bardzo wysoko rozwinięty język skryptowy.
Jeśli umieścisz linię specyfikatora wskazujący jeden z tych programów na początku,
będzie przejść bezpośrednio do tego programu, a nie zaczynając powłokę.
Programy te mają granice swoich możliwości.
Perl jest bardzo zdolny. Sed jest edytorem. To może robić rzeczy poza zwykłe edycji.
Ale to może być trudne do zaprogramowania to.
Ponadto, przekazując argumenty i rzeczy do skryptu jest niemożliwe lub mylące.
Tak więc w tych przypadkach, w awk i sed, to, przynajmniej w moim doświadczeniu,
korzystne, aby napisać skrypt powłoki i połączeń awk lub sed ze skryptu powłoki
a nie wywołanie awk lub sed jako linii skrypt specyfikującego.
Perl jest bardzo zróżnicowany język, jak powiedziałem.
Nie można uruchomić interaktywne polecenia w Perl,
co oznacza, że ​​nie można przetestować fragmenty skryptów, że jesteś rozwijających się
uruchamiając je interaktywnie.
Jednakże, jest to język bardzo zdolny
i stał się bardzo szeroko stosowane narzędzia.
To tylko trochę w nawiasie uwagi o liniach specifier.
>> W całości lub większości form Linux - ponownie, nie mogę być pewien, że wszystko -
w systemie Mac OS, jeśli CSH masz tcsh,
i po wpisaniu sh masz bash.
Chcieli tam dać bardziej zaawansowane wersje tych pocisków,
ale to może być mylące.
Jeśli napisać skrypt przy użyciu tcsh lub Bash oferuje wzywając csh i sh
a następnie spróbuj uruchomić go na komputerze, który nie ma tcsh lub bash,
Może masz jakieś błędy, czy są tam komendy
Powłoki te, które nie uznają.
Ponadto, może być powołany powłokę na Twoim komputerze
nazywając ją jako sh lub csh, a następnie coraz bardziej zaawansowanych pocisków.
Nie możesz nawet myśleć o tym, że jesteś z wykorzystaniem bardziej zaawansowanych powłokę.
Więc to jest potencjał pułapki.
Jak zostało ustalone, że jeśli wpiszesz sh masz Bash,
jeśli CSH masz TSCH?
Są rzeczy w tych komputerach zwane linki
które można połączyć do nazw plików w odniesieniu do tej samej rzeczy.
To może być albo 2 nazwy tego samego pliku lub pliku, którego celem jest, aby odnosić się do innego pliku.
Nazywają się twarde i symboliczne linki. Nie będzie już, że dzieje się dzisiaj.
Nie mogą być również oddzielne pliki - 1 plik sh, 1 plik Bash -
ale oboje uruchomić Bash.
Jest jeszcze inny kwalifikator tutaj.
Jeśli wywołanie jednej z tych muszli przez jedną nazwą,
Może myślisz, że masz taką samą funkcjonalność jak nazywając go pod inną nazwą.
Dobrze, że w rzeczywistości nie jest to prawdą.
Polecenia te można zbadać nazwy przez które nazwali
i mogą, na podstawie tej nazwy, zachowują się inaczej.
Mogą wystąpić problemy z próby zgodne ze standardem.
Niektórzy z was słyszeli o standardzie POSIX lub innego,
być może inne cechy.
To czasem może być wybrany przez argumentów wiersza poleceń
lub poprzez ustawienie zmiennych powłoki.
Nazywając ją jako sh lub bash może rzeczywiście doprowadzić do innego wykonania
nawet jeśli jest to ten sam plik, że jesteś wykonywania.
Kolejną rzeczą do rozważenia jest to, że nawet jeśli inny komputer ma tcsh lub bash,
jeżeli nie są one związane są one na Twoim komputerze
jeśli masz komputer lokalny Linux lub Mac OS,
potem znowu dostaniesz powłokę, którą nazywamy sh lub csh, a nie jeden, że może wolisz.
Bourne Shell ma prądu ulepszenia mniej niż w Bash
ale przeszłość tych, w oryginalnej powłoki Bourne'a.
W rezultacie tego, nawet, obecny powłoki Bourne sh
nawet wtedy, gdy nie jest Bash, przypomina język C więcej niż C-shell robi.
To nie była prawda, kiedy C-shell został stworzony, ale rozwinął w ten sposób.
Można zauważyć tutaj, że wszystkie te nazwy powłoki z wyjątkiem powłoki Bourne
mieć coś do wskazania, które powłoki są - csh, bash -
ale to tylko powłoki Bourne'a sh.
Dlaczego? To było przy muszli.
To było powłoki następnie, nie powłoki,
a ponieważ było powłoki, nie było powodu, aby odróżnić ją od innej powłoki.
To dlatego, że ma to imię i nadal robi.
>> To tu jest górna linia z bazy danych hasło do konta nie mam
w innym komputerze.
Zamierzam spróbować dostać tę nazwę, dzięki czemu można zobaczyć, że część na końcu, muszlę.
Hasło bazy danych posiada właściwości logowania dla wszystkich użytkowników.
Na początku jest nazwa użytkownika, który można zobaczyć ostatnie 2 litery kopalni teraz.
Tutejsze pola oddzielone są średnikami.
Ostatnie pole, jak widać, jest bin / tcsh, Shell.
To Specifier powłoki.
Jest tu coś ciekawego.
Kiedy Unix został opracowany, był tylko 1 powłoki,
więc nie było żadnego wyboru.
Więc dlaczego pozwalają pole w bazie haseł określić powłokę?
Nie wiem, ale to szczęście, że to zrobili.
Jest to raczej trudne do wykonania zmian w formacie bazy danych hasło
ponieważ wiele programów można znaleźć w pliku PDF
i musiałby być przepisany.
To trafny lub przypadkowy rozwój, że zawarte to pole.
Ten rodzaj linii pliku hasło jest używane na wszystkich komputerach Unix i Linux, o ile wiem.
Mac ma swój własny system.
To faktycznie ma plik haseł z linii w tym formacie,
jednak nie jest to w przypadku gdy cechy są określone przez użytkownika.
Innym nawias uwaga tam.
>> Jeśli dzwonisz powłokę, można nazwać to jako sub-shell z istniejących powłok.
Więc jeśli pójdę tutaj, niech pozbyć się tych rzeczy.
Oto jestem w C-shell.
Że zmienne, które dokładnie określa moją skorupę,
w rzeczywistości nie zawsze jest niezawodny sposób określenia tego, co powłoki używasz,
ale w tym przypadku jest to.
Co zrobić, jeśli po prostu wpisz -
Teraz jestem w Bash.
Niektóre rzeczy będą takie same. Czy mówi mi moje polecenia.
Jeśli mam zawiesić z powrotem do mojego C-shell, LS, sam. Prawda?
fg, na pierwszym planie, z powrotem do mojego basha.
pwd, katalog bieżący, z powrotem do C-shell.
pwd, inny katalog - właściwie nie różni się w tym przypadku katalog.
To jest ten sam katalog.
Powiedzmy, że chcę zadzwonić polecenie tutaj: Gdzie ls.
Co to robić?
Mówi mi, gdzie komendę ls,
jeden, który daje mi listę katalogów, znajduje się w ls.
Wróćmy do basha. Spróbujmy to samo.
Hmm, ciekawe jest, w przypadku gdy: nie znaleziono polecenia.
Dlaczego tak jest?
Gdzie polecenie jest wbudowane w C-shell.
To nie jest polecenie, które ma być odczytywane z pamięci z innego miejsca i wykonywane.
C-shell prowadzi go przez przeniesienie egzekucji do części własnego kodu
i to nie jest w basha.
Więc Bash, nie mając takiego wbudowanego polecenia, wygląda na to, nie ma go znaleźć,
i pojawia się błąd.
Więc nie mamy powłoki bash uruchomiony pod C-shell, a my nazywamy to sub-shell.
I tylko w przypadku, jesteś ciekawy, powłoka Bash ma swój własny sposób na odnalezienie poleceń.
przerywane odnosi się do faktu, że może być wykonane szybciej,
znaleźć się szybciej.
To jedno z ulepszeń wbudowanych w niektóre z tych pocisków.
>> Bourne typu skorupy są korzystne dla programowania.
Mają struktur kontrolnych, takich jak pętle, instrukcje warunkowe,
rodzaj poleceń, które można używać w językach programowania takich jak C
lub niezależnie od języka. Może jesteś programowania w Javie lub cokolwiek.
Pociski te mają zbyt.
Pociski typu Bourne'a, szczególnie Bash, mają więcej
i mają większą elastyczność.
Powłoka Bash ma tablic. Powłoka Bourne'a oryginału nie.
Tak, że może być szczególnie korzystny do programowania.
C-shell faktycznie ma tablic, ale nie ma wiele innych funkcji.
Pociski typu Bourne'a wykona szybciej
jeśli nie mają one funkcje są przeznaczone do użytku interaktywnego.
Załadować rzeczy na dół do jednego celu, to ładuje je do innych celów.
Nie ma, że ​​istnieje kompromis.
Te cechy, które są przeznaczone do użytku interaktywnego
naprawdę mają niewiele lub nie stosowania skryptów.
Jest to możliwe do wykorzystania pod-interaktywną powłokę, tak jak ten, zacząłem tam
przetestować poleceń, które ma być używane w skrypcie.
To jest to, czego nie można zrobić z Perl. Możesz to zrobić z muszli.
Nawet konstrukcje, takie jak pętle i tak dalej można uruchomić interaktywnie.
Są czasami przydatne do uruchomienia interaktywnie,
ale bardziej prawdopodobne, że używasz ich do opracowania scenariusza.
>> Aliasy.
To będzie o C powłoki.
Historia, w którym mechanizm wrócić do wcześniejszych poleceń
lub ich części, które już uruchomić.
Ponownie o C-shell, powłoki Bourne i Korn mieć te rzeczy,
ale ja nie zamierzam dostać się do nich.
Więc oto kilka przydatnych aliasów, które mam.
Zamiast wpisywać ls - to wspólne polecenie -
wpisz l i zapisać się 1 znak.
Czy z różnych opcji, wszystkie te prace.
Należy pamiętać, że definicje te mają cudzysłowy wokół nich.
W tych przypadkach, cytaty nie są konieczne.
Jeśli można określić te aliasy bez cudzysłowów, to nadal działa.
Oni są zalecane.
Istnieją sytuacje, w których nie można używać cytat
bo chcesz coś się wydarzy, który cytuję uniemożliwiłoby.
Czasami można zacytować część definicji, ale nie wszystkie.
Jest także zazwyczaj zaleca się stosowanie apostrofów zamiast cudzysłowów.
Cudzysłowy mają wpływ na zmienne definicje,
Szczególnie powodując ich do oceny niż zatrzymania.
Dlatego chcielibyśmy, aby zatrzymać ocenę?
I jak cytaty to dla nas zrobić?
>> Oto polecenie, które może się okazać interesujące.
'Ls g *'
g *, jak zapewne wiesz, jest wieloznaczny wyraz
dla wszystkich nazw plików rozpoczynających się od g.
Jeśli po prostu napisać w poleceniu ls g *, dostanę listę wszystkich tych nazw w moim bieżącym katalogu.
Jeśli zdefiniować ten alias, jak to jest tutaj z cytatami,
to będzie działać, że polecenie w bieżącym katalogu, w którym właśnie pracujesz.
Ale po uruchomieniu definicję aliasu bez cudzysłowów,
będzie oceniać wieloznaczny g *, gdy prowadzi to polecenie określające.
Tak więc definicja aliasu zostanie ls następnie listę plików w katalogu
, w którym polecenia alias jest wykonywana
niezależnie od tego, gdzie faktycznie zamierza uruchomić polecenie.
To nie jest zbyt użyteczne, a pojedyncze cudzysłowy uniemożliwiają ocenę gwiazdką.
Więc po prostu definiowanie istoty ls g *.
Następnie po uruchomieniu alias, LGS, to wtedy kładzie to.
Teraz nie ma żadnych ofert, i oceni gwiazdkę po uruchomieniu polecenia alias.
Więc to jest jedna rzecz.
Cudzysłowy miałoby ten sam efekt tutaj,
ale są inne przypadki, w których podwójne cudzysłowy nie działa tak dobrze.
>> Tu jest jeszcze jeden.
Może wiesz polecenia grep.
Polecenie grep może być używany do skanowania pliku do linii, które mają pewne ciągi.
Więc chodźmy tutaj i będę wyjść z mojego powłoki Bourne.
Ok. Oto plik.
Powiedzmy, że to grep ciągi abc. Jest.
Jeśli zrobić grep zddd, ja nic. Ok.
Więc znajdzie ciąg, podlega, nie znajdzie, to nie to zgłosić.
Wyprowadza dowolną linię, która ma ten ciąg na nim.
Istnieje wiele opcji tutaj które można znaleźć w dokumentacji.
Oto jeden ze sposobów, aby to zrobić.
Co o tym jednym, alias grabc 'grep abc "?
Że będzie zawierać 1 argumentu gdy alias jest określony.
Więc jeśli ja, że ​​tu, teraz, jeśli ja grabc,
teraz alias zawiera więcej niż prostego polecenia. Posiada również argument.
Tak daleko, że działa.
Mam jeszcze jedno polecenie tutaj, to jedno, więc to są tam różne ciągi
i pokazać, że nie znaleźć coś tam, ponieważ nie zgadza.
>> Co zrobić, jeśli chcesz dołączyć do definicji aliasu plik, który mam zamiar sprawdzić
i chcę dać jako argument do aliasu smyczkowy, że szukam?
Może chcę powiedzieć, abc jako argument do mojego pseudonimu,
ale alias już ustalona plik.
I tam jest cala to wyrażenie
Zauważ, tutaj mamy grep jak wcześniej.
Mamy plik tutaj, sznurki.
\! ^, Trochę dziwne wypowiedzi, przypuszczam, jeśli nie widziałeś tego wcześniej.
Wykrzyknik jest częścią C-shell mechanizmu historii.
To może wywołać wcześniejsze polecenia, może przywołać argumenty do tych poleceń i tak dalej.
Mechanizmu historii jest stosowany jako część krawędzi.
W przypadku określenia linii po wykrzyknikiem, będzie odnosić się do tej linii na liście historii,
które nie będą się do teraz, ponieważ jest to zupełnie inny temat.
Jest możliwe określenie część linii.
Tak! 03:02 będzie drugi argument numer 3 polecenia.
Daszek tutaj w tym wyrażeniu oznacza pierwszy argument.
Jeśli nie dać wskazanie, którego polecenia masz na myśli,
odnosi się do poprzedniego polecenia,
i daszek jest symbolem pierwszego argumentu.
Bo to jest daszek, a nie ilość, nie trzeba używać dwukropek,
tak! ^ oznacza pierwszy argument poprzedniego polecenia.
Trochę miesza się tutaj.
W tym przypadku, gdy używasz to jako definicja aliasu,
odniesienia historia nawiązuje do poleceń, w których wykorzystywany jest alias.
Więc to wraca 1 polecenie jako działania historii,
ale jako działania alias odnosi się do polecenia, w którym należy wpisać,
powiedzieć, grstrings_file.
Mamy tu w nim cytaty. Co jest odwrotny ukośnik na?
W tym przypadku, podobnie jak w innych, nie chcemy, aby uruchomić mechanizm Historia
podczas definicji aliasu.
Jeśli nie mamy tam backslash, powłoka będzie ciągnąć w pierwszym argumencie
polecenia tuż przed prowadził tego polecenia alias, który nie chcemy.
Chcemy, aby było to wbudowane w poleceniem alias zadzwonić argument później.
Pojedyncze cudzysłowy nie uciec wykrzyknik, odniesienie historii.
Może wiesz ucieczka wyrażenie oznacza zmienić znaczenie czegoś.
W tym przypadku oznacza to, że aby zatrzymać coś z posiadania specjalnego znaczenia.
Wykrzyknik na szczególne znaczenie ma historia.
Uciec i nie ma to znaczenie.
Cytaty nie rób tego, odwrotny ukośnik nie.
Więc jesteśmy rzeczywiście przy 2 poziomy ucieczki tutaj.
Zamierzam przenieść tego polecenia do innego okna bez wpisywania go
za pomocą tych operacji edycyjnych, które mogą okazać się przydatne.
Coś jeszcze tutaj pokażę ci.
Jeśli po prostu wpisz alias bez żadnych argumentów, to mówi ci wszystkie swoje argumenty.
To jest kilka aliasów Miałem już tutaj
oprócz tych, które używam tu dzisiaj.
Ale jeśli po prostu wpisz z nazwą aliasu, to mówi mi, co to znaczy.
Zauważ, że cytaty są już i odwrotny ukośnik nie ma.
Ciąg ten tutaj jest wynikiem tej definicji aliasu,
i teraz ma tylko! ^ w nim.
To będzie wyglądać w struny plików na wszystko.
Więc jeśli ja grstrings_file sznurki, nie dać mu nic do szukania tam,
ale patrzy w ciągi.
To nie znaleźliśmy ciągi słów w ciągi plików, ale nie znaleźliśmy abc.
I nie okaże się, że.
Więc dajemy argument, że uderza w definicji aliasu,
które dodaje się do niego.
To gdzie to wyrażenie pochodzi.
Możesz użyć więcej niż 1.
Daszek jest symbolem pierwszego argumentu.
Jeśli chcesz użyć drugiego argumentu, by następnie powiedzieć: 2.
Nie ma specjalnego symbolu dla drugiego argumentu.
A ponieważ używasz cyfrę trzeba by użyć dwukropka.
Nie jest jednak inny wybór tutaj.
Znak dolara oznacza ostatni argument.
A ponieważ jest to symbol, można pominąć dwukropek.
Więc będzie to ostatni argument na liście.
I tam też, że jeden.
Gwiazdka oznacza wszystko, więc jest to pełna lista argumentów,
i znowu, można pominąć dwukropek bo to nie jest cyfra.
Mam nadzieję, że wszystko obserwując to wszystko.
Historia >> mechanizm można wrócić do wcześniejszych linii na liście historii.
Można to zrobić w definicji aliasu.
Nigdy nie widziałem tego zrobić.
To skutkuje wyciągnięciem wcześniejszych poleceń z listy historii
podczas wykonywania alias, które mogą być różne polecenia
w zależności od czasu i miejsca jej wykonywania.
Niewykluczone możesz wyciągnąć takiego odniesienia
po prostu wiedzieć, co było wcześniej poleceń.
Nigdy nie widziałem tak się stało.
Przypuszczam, że ktoś może chcieć, ale jest to bardzo mało prawdopodobne.
Jest jeszcze jedna rzecz tutaj.
Jeśli używasz tego typu historia odniesienia,
następnie są wykorzystywane tylko argumenty, do których istnieje takie odniesienia.
Jeśli masz definicję aliasu, który nie korzysta z historii odniesienia typu,
jeśli tak się początkiem rozkazu
i masz więcej argumentów, to nic, że wpiszesz po
zostaną dodane do polecenia.
W tym przypadku, po prostu dał przykład tam, kiedyś pierwszy argument;
nie używać żadnych innych.
Jeśli inne argumenty zostały podane w linii poleceń, nie będą wykorzystywane.
Więc jeśli używasz odwołanie Historia w ogóle, to musisz użyć, aby uzyskać żadnego argumentu.
>> Jest jeszcze jedna rzecz, tutaj chcę tylko wspomnieć, częściowo na marginesie,
a mianowicie, że ten mechanizm historia z wykrzyknikiem
wraca do pierwotnego C-shell.
Historia operacji wprowadzono tcsh
których korzystanie z różnego rodzaju poleceń i smyczki z redaktorów,
zarówno Emacs czy vi.
Moja osobista opinia jest Emacs jest o wiele łatwiejsze w użyciu w tym celu
nawet jeśli używasz vi do regularnej edycji.
Istnieją różne Emacs poleceń, które są obecnie przystosowane do historii.
Kontrola P dostaje poprzednią linię na liście historii.
Kolejna kontrola P będzie Ci jeden przed tym.
Strzałka w górę robi to samo.
Kontrola dotyczy dostaje następnego polecenia jeśli już przewijany do tyłu kilka sposobów.
Strzałka w dół robi zbyt.
Możesz przejść w lewo w prawo za pomocą strzałek i różnych innych rzeczy.
To może skorzystać z mechanizmu historii
znacznie łatwiejsze niż przy użyciu składni wykrzyknikiem,
ale nie będzie używać, że w definicji aliasu.
Pójdziemy nad tym innym razem.
>> Zmienne.
Wiesz, co zmienne są w językach programowania.
Muszle mają je również.
C-shell używa komendy set przypisać zmienne,
tak, że ustawia zmienną A do wartości b -
jak powiedziałem, bezużyteczną definicję ale ilustrację, jak to jest używane.
Polecenie set będzie utworzyć zmienną, jeśli jeszcze nie istnieje.
Parametry pozycyjne dla skryptów powłoki można uznać za zmienne,
ale korzystanie z nich i dla nich zasady są nieco inne.
Nie można przypisać wartości do $ 1 w trakcie scenariusza.
Trzeba by zdefiniować nową zmienną do tego celu, jeśli niektórzy z was chciał.
Wpisz set bez argumentów, a otrzymasz listę wszystkich aktualnie zdefiniowanych zmiennych.
I przejdźmy do mojego drugiej powłoki tu i zobaczyć, co możemy uzyskać, jeśli robimy to.
Dość długa lista, prawda?
Przewiń w górę trochę. Spójrz na to wszystko.
Niektóre z tych rzeczy są określone automatycznie przez powłokę.
Powłoka tworzy zmienną i nadaje mu wartość.
Niektóre z nich są określone przez powłokę, ale potem na nowo przez użytkownika
według swoich preferencji.
A niektóre z nich są tworzone przez użytkownika w zależności od tego, co on robi, że dzień.
To się po prostu ustawić bez argumentów.
Jest dziwne cechą tutaj tej rzeczy.
Nie muszą być albo bez spacji między znakiem równości i nazwy zmiennej
i wartość lub przestrzenie po obu stronach znaku równości,
tak jak w tym drugim.
To nie będzie działać, i to rzeczywiście jest ważne polecenie
ale nie będzie to, co zamierzasz.
Że polecenie będzie działać, bo jeśli tylko powiedzieć ustawić i nazwy zmiennej
ze nie ma znaku równości lub ustaw, a nazwa zmiennej ze znakiem równości i nie ma wartości,
będzie ustawić zmienną na wartość null.
Tak ustawione A = oznacza ważne polecenia.
Polecenie set można określić więcej niż 1 zmiennej na tej samej linii.
Tak, to polecenie ma tu wpływ definiowania A i B jako wartość null.
Pewnie nie to, co chcesz.
Ten tutaj, wspomniałem wcześniej, będzie prowadzić do błędu
bo = b nie jest poprawnym wyrażeniem.
Nazwa zmiennej nie może zaczynać się znakiem równa się.
I tam są te dalsze rzeczy tutaj.
Dwukropki były używane do wyboru argumentów z linii historii,
i mogą być stosowane - i nie iść do przed - w celu zmiany tych rzeczy.
Mogą one być również stosowane do modyfikowania zmiennych powłoki.
Ten tutaj, $, ma wartość.
: R odbędzie się rozszerzenie.
Rozszerzenie będzie coś po kropce,
kropka i nic po nim na końcu pliku,
tylko na końcu listy po ostatnim ukośnikiem.
Więc mam go tutaj.
jest to, że. Będzie spadać. O..
Jeśli nie ma rozszerzenia, tylko ścieżki: po ostatnim ukośniku, to nie mają żadnego wpływu.
: h, że zmienna ekspresja, odbędzie się ostatni element listy katalogów,
ponownie dopiero po ostatnim ukośnikiem.
So / / b / c się / / b
ale ten zmienia się, ponieważ element po liście jest null.
Tutaj jest coś, co również chcę podkreślić.
Te eliminacje nie sprawdzić istnienie tych plików.
Oni po prostu patrzeć na smyczki.
Są one przeznaczone do manipulowania nazw plików, ścieżek,
ale mogą być wykorzystane na dowolny ciąg, nawet jeśli to nie jest nazwa pliku.
I nie patrzeć na istnienie,
więc jeśli nie ma takiego pliku, / a / b / c, to będzie nadal działać.
Czy to w jakikolwiek sposób użyteczne, to inna kwestia, ale nadal będzie ona działać.
Zmienne są różne w powłokach Bourne'a. Dojdziemy do tego później.
Znak dolara można uciec tak jak wykrzyknik i gwiazdką.
Znak dolara można uciec z ukośnikiem lub apostrofach.
Cudzysłowy mają wpływ na wszystkich muszli dziwny
wymuszania ocenę znak dolara zmiennej ekspresji.
Więc jeśli to jest uciekł w jedną stronę, to cudzysłowy mogą mieć wpływ
z co jest on tak oceny.
To jest trochę mylące.
Jeśli istnieje wiele poziomów ucieczki, takich jak apostrofy wewnątrz podwójnych cudzysłowów
lub podwójne cudzysłowy wewnątrz pojedynczych cudzysłowów, należy przetestować, aby zobaczyć, co się stanie,
do zmiennej, jeśli używasz jednego.
Te 2 sytuacje - podwójne wewnątrz jednej, pojedynczej wewnętrznej podwójna -
nie zawsze daje ten sam wynik.
Zmienne środowiskowe, związane zmienne C-shell.
Zmienne środowiskowe są również zmienne w C-shell,
i są również zmienne w innych skorup też.
W C-skorupy, są różne zestawy.
Rzeczy mówiłem wcześniej są o zmiennych powłoki.
Zmienne środowiskowe są odrębny zestaw zmiennych
z wyjątkiem kilku zmiennych, które nazywamy zmienne związane,
które są bardzo ważne, a my się tym później.
Zmienne środowiskowe są automatycznie przekazywane
do muszli lub poleceń, które są uruchamiane z powłoki.
Inne rzeczy nie są. Zmienne powłoki, aliasy nie są. Zmienne środowiskowe są.
Dlatego nazywamy je zmienne środowiskowe,
Pomysł jest, że środowisko rozciąga się tylko bieżącej powłoki.
Mogą one być używane do określania co poleceń.
Oto przykład. DRUKARKA, LPDEST.
Oba z tych zmiennych można zdefiniować drukarkę, polecenie używane do drukowania rzeczy.
Jeśli masz kilka drukarek wokół, można umieścić jeden chcesz.
Powodem mamy 2 zmienne jest, że różne zestawy poleceń zostały napisane
za pomocą tych różnych zmiennych.
Możecie dać im różne wartości.
Najprawdopodobniej będziesz im zarówno samą wartość.
Te rzeczy działają, ponieważ polecenia, które drukować
zaprogramowano zbadanie wartości tych zmiennych.
Jeśli program nie zostały napisane w taki sposób, jakby były napisane zrobić coś innego,
Zmienna będzie bez znaczenia.
Więc system operacyjny nie szuka tych zmiennych
każdym razem, gdy odnoszą się do drukarki.
Polecenie, które ma drukowanie poszukuje tych zmiennych, jeśli jest zaprogramowany w ten sposób.
Zmienne te są często definiowane w plikach inicjalizacji
lecz niekoniecznie.
Można je zdefiniować w linii poleceń.
Mogą one być określone w polecenia.
Polecenia, które uruchamia coś może mieć własny wybór zmiennych -
zmienne, które są unikalne dla danego pakietu oprogramowania, na przykład.
Będą określone po uruchomieniu tego pakietu.
Jak zmienne te przekazywane do podpowłoce?
Kiedy pod-powłoka jest napisane, że nie pisze w tym obszarze.
Powierzchnia podpowłoce, który jest poświęcony zmienne środowiska
nie jest napisane przez sub-shell, jest napisane przez kopiowanie.
Po uruchomieniu zwykłego polecenia, takie jak te polecenia, aby wydrukować lub cokolwiek,
zaczynają się tworząc nową powłokę.
Powłoka tworzy powłokę, a następnie zastępuje część,
z poleceniem, że jesteś z systemem, który jest trochę mylące,
ale to jak te polecenia uzyskać zmienne środowiskowe
że to odnosi się do przyszłości.
Komenda tutaj definiowania zmiennej setenv.
To, w jaki sposób zdefiniować. Jest to 3 elementy: setenv, zmienne, wartości.
Jeśli tylko nie setenv bez argumentów, co masz?
Lista wszystkich tych zmiennych.
Ponownie, jest to długa lista, w tym przypadku, podobnie jak w innych,
te zmienne są definiowane głównie przez mojego działania logowania przez samego zbiornika
a nie przez cokolwiek zrobiłem.
Jest inna komenda tutaj, printenv.
Który drukuje również środowiska.
Zauważ, to ostatnia rzecz, o, editor = vi.
Które mówi, że jeśli używam czegoś, co wywołuje edytor
a ja nie określają edytora i umożliwia mi wybór, to może dać mi vi.
Co zrobić, jeśli mam printenv edytorze? Mówi mi, co to jest.
Tuż przed tym, nie było zmienne, MNIEJ.
Są to opcje domyślne podczas uruchomić mniej polecenia,
który wyświetla pliki.
Więc jeśli to zrobię, printenv może wziąć 1 lub 0 argumentów argumentu,
nie więcej niż 1.
Istnieją też inne polecenia, ale nie będziemy się dostać do wszystkich, że dzisiaj.
Zapamiętaj było modyfikatory dla zmiennych powłoki, takich jak: H,
która spadnie na ostatni element ścieżki,
lub: R, który spadnie na przedłużenie.
Ci, teraz stosuje się do zmiennych środowiskowych też. Nie przyzwyczajony.
Kiedyś było tak, że nie mogą być zmienione. Teraz mogą one być.
To jeden z zaliczek z wydarzeń z muszli na przestrzeni lat.
Mówiłem, że muszle jako część środowisk
i zmienne powłoki w powłoce C są, z pewnymi wyjątkami, różnych zestawów.
Można ustalić zmienną środowiskową i zmienną powłoki o tej samej nazwie.
Będą one inne zmienne, mogą mieć różne wartości.
Zmieniając wartość jeden, nie zmieni wartości drugiego.
Wszystkie te zmienne są oceniane ze znakiem dolara - $, $ cokolwiek.
Więc co, jeśli masz to? Czy wiesz, który z nich masz?
W moich testach mam zmienną powłoki,
ale to nie jest udokumentowane i nie można powoływać się na to.
Więc pytam, tworzy powłoki i zmiennych środowiskowych
o takich samych nazwach to dobry pomysł? No dobrze.
Jakie są te główne wyjątki, w których zmienne środowiskowe i powłoki
są połączone ze sobą?
Są to 4.
Zmienna środowiskowa TERM litera,
określenie zmiennej powłoki małymi literami typu emulacji terminala.
Mam zamiar iść na tutaj i mam zamiar zrobić echo, przydatne polecenia tutaj,
$ TERM $ termin. I tam.
xterm jest typ terminala dla okien wyświetlanych w systemie X Window.
xterm kolor jest odmianą, że pozwala na różne kolory.
Dlaczego zdefiniować te? Co to jest dobre dla?
Polecenia zmienić układ ekranu, jak w edytorze
wysłać poszczególne sekwencje, zwane sekwencje specjalne,
do terminala lub okna, aby zmienić jej i tak dalej.
Sekwencje te są różne dla różnych typów końcówek.
Mówi to, które z nich korzystać.
Czasami są problemy istnieją.
Możesz to zmienić.
Jeśli coś nie działa, czasem typ terminala jest ustawiony tak,
być może uda się go naprawić poprzez ponowne zdefiniowanie zmiennej TERM.
W tych przypadkach, zmieniając jedną zmienną, zmienną środowiskową lub zmiennej powłoki,
należy zmienić drugą.
Odkryłam, poprzez doświadczenie, że zmiana terminu w literami
nie zawsze zmienić zmienną powłoki termin małymi literami.
To jest błąd.
Nie wiem, czy to jest zawsze prawdziwe. Większość czasu to nie jest prawda, ale może być.
Więc jeśli coś zmienić, po prostu sprawdzić, czy na zewnątrz.
To nie jest często, że trzeba zmienić tę wartość, ale raz na jakiś czas zrobić.
Zmienna środowiskowa USER.
Ponownie, zmienna literami, shell zmienną małymi literami.
To jest Twoja nazwa użytkownika.
To tylko w bardzo wyjątkowych okolicznościach
, który chcesz zmienić.
Jeśli Twoja nazwa użytkownika jest ktoś inny, może rzucać różne rzeczy off.
Katalog domowy, katalog domowy użytkownika.
Znowu, nie chcesz, by to zmienić.
Zawiadomienia w tych wszystkich przypadkach, i ten, który mamy zamiar pokryć, zmiennej PATH,
zmienna jest wielkimi literami, a związana jest zmienna powłoki z małych liter.
Jeśli zmienisz jeden, należy zmienić innych.
Ten rodzaj wiązania nie można ustalić, ponieważ nie można wiązać 2 zmienne,
inne niż te 4 i wiązania w tych zmiennych nie można cofnąć
nie można ich rozdzielić.
Więc te 4 pary zmiennych są związane.
Oni zawsze będą. Żadne inne będą.
Ponadto byłoby możliwe, aby utworzyć zmienne o tej samej nazwie
przeciwległych typów.
Można zrobić powłoki zmienna termin małymi literami
lub zmienną środowiskową TERM literami.
Zmienne te będą niezależne od tych zmiennych sparowanych
i będą one niezależne od siebie.
Nie mogę sobie wyobrazić, dlaczego miałbyś to robić, jeśli nie chcesz, by zmylić ludzi.
Ten tutaj, zmienna ścieżka, to jest naprawdę ważne.
Inną rzeczą jest to, że nie może być przypadki
zmiennych o podobnej nazwie sparowanych, które nie są związane ze sobą.
Nie może być zmienne, powłoki i powłoki, w duże i małe litery.
Na podstawie tej nazwy, nie wiem, czy zmienna jest zmienną powłoki
lub zmienna, a nie są one połączone ze sobą nawzajem.
Tak więc tego rodzaju powiązanych nazw nie oznacza, zmienne związane.
Zmienna ścieżka, którą pokazywał wcześniej,
jest lista ścieżek, w których powłoka szuka poleceń.
Zabierzmy się do tego okna tutaj i zrobimy echo $ PATH, litery -
zmienna - echo $ path, małe litery - shell zmienną.
Zauważ, że lista katalogów jest taka sama. Są one związane.
Zmienić jeden, można zmienić innych.
W zmiennej środowiskowej elementy są oddzielone dwukropkami. Zauważ, że.
Zmienne powłoki są oddzielone spacjami.
Ta zmienna jest pojedynczy łańcuch.
Zmienna powłoki jest tablicą.
Bourne Shell nie miał tablic.
Atakujących nie, ale to już ustalona część powłoki.
To jest jeden ciąg znaków, a nie tablicą.
C-shell zawsze miał tablic.
Tablice są znacznie łatwiejsze w użyciu.
Można odwołać się do części.
Więc echo $ path [1] i mam / usr / bin, pierwszy element.
Ponownie, pamiętaj znak dolara oznacza ostatni element na liście historii.
Co tam się dzieje? Próbował znaleźć dolara jako symbol zmienny.
I uciec. Ups. To nie zajmie, że albo.
Niektóre z tych rzeczy nie tak dobrze.
Może po prostu zostaw to.
Gwiazdka odnosi się do całej sprawy, ale to jest to, co masz, jeśli nie określić element.
Inny sposób, że zmienne tablicowe mogą być manipulowane,
Liczba elementów tam, 7 elementów.
Tutaj stawiamy znak funta przed nazwą zmiennej.
Tutaj jest jeszcze jeden. Stawiają pod znakiem zapytania nie.
To jest wartość logiczna. , Które wskazuje, że zmienna istnieje.
To kolejny sposób pracy ze zmiennymi.
, Które, nawiasem mówiąc, nie musi być zmienną tablicową.
To może być dowolna zmienna.
I jeśli to zrobię, jest zmienna, a ja takich nie otrzymasz 0.
Kolejna mała rzecz nie o zmiennej ocen.
Powrót do tego tutaj, jeśli z jakiegoś powodu chciał pracować z tym
Zamiast pracy z tablicy, zmienna powłoki,
obecne są polecenia, które oddzielają te rzeczy oparta na okrężnicy.
W rzeczywistości, jeśli masz zamiar robić to na basha ewentualnie,
jakiś skrypt, który będzie prawdopodobnie w jaki sposób to zrobić.
Ale w C-shell jest to o wiele łatwiejsze w użyciu tablicę.
W Bourne shell, zmienne są przypisywane przez jednego wyrazu jak ta,
jak sposób można przypisać zmienną w języku programowania,
a tu nie ma spacji.
Jest to konieczne, aby być tylko 1 ciąg.
W muszli typu Bourne'a, wszystkie zmienne są zmienne powłoki.
Zmienne środowiska są podzbiorem zmiennych powłoki.
Wyróżnia się od zmiennych nie-środowiskowych poprzez eksport.
Polecenie, aby to zrobić jest eksport, jak na przykład drukarki eksportu.
Gdybyśmy zdefiniować taką zmienną,
jeśli chcieliśmy polecenie drukowania, aby je znaleźć, to musi być zmienna,
i tak robimy to jedno.
Tutaj jest coś rodzaju mylące.
To wyrażenie, eksport do środowiska, wynika z tej koncepcji powłoki Bourne'a,
a mimo to wyrażenie jest używane w opisach C skorupek
gdzie nie ma takiego polecenia jak eksport.
Jeśli po prostu powiedzieć, eksport przez siebie, można uzyskać listę eksportowane -
Więc jeśli ja po prostu wyeksportować tutaj, nie ma czegoś takiego.
Dobra, idziemy.
Te rzeczy, przy okazji, są również zdefiniowane przez powłokę.
Nie każdy z nich zdefiniować sam.
Shell robi różne rzeczy o sobie.
Powinien automatycznie robić rzeczy.
W bash lub Korn, można uruchomić polecenie tak,
które dadzą zmienną wartość i wyeksportować go w 1 polecenia.
W powłoce Bourne muszą być oddzielne komendy jak wyeksportować.
Tutaj jest jeszcze jeden aspekt, który jest mylące.
Zestaw poleceń w C-shell definiuje zmienne
i bez argumentów mówi, jakie wartości zmiennych 'są.
W basha, zestaw poleceń bez argumentów nie to samo,
ale z argumentami, że robi coś zupełnie innego.
To są różne argumenty tutaj.
Niektóre z nich są zmienne środowiskowe, niektóre z nich są zmienne powłoki.
Wszystkie z nich są zmienne powłoki naprawdę. Niektóre z nich są zmienne środowiskowe.
Zestaw poleceń z argumentów może być używany do obsługi
na parametry pozycyjne do skryptu,
co jest sposobem na uzyskanie je wszystkie na raz.
Nie możemy iść w tym dzisiaj.
Może on być również użyty do zmiany zachowania powłoki.
Szczególnie w Bash są zmienne, które określają, jak powłoka zachowuje.
Wtedy też po prostu to jedno polecenie, które można zobaczyć, to polecenie.
Przygotowana następnie zmiennych i typów zmiennych jest wykorzystywany w Korn i bash.
Nie jest to wymagane, ale mogą być wykorzystywane do ograniczania wartości zmiennych
które mogą być przydatne, aby zapobiec błędom, i to jest dość powszechne.
Więc ja tylko wspomnieć, że w przypadku, widzisz go gdzieś.
Komenda gdzie.
Pamiętam, jak już wcześniej wspomniałem, w których polecenie w C-shell,
co może powiedzieć lokalizację ścieżki poleceń.
Oto podstawienia polecenia.
Należy znaleźć na klawiaturze gdzieś znaków, który wygląda tak.
Lokalizacja na klawiaturze się zmienia.
Mamy nazwał backquote. Chodzi o wielkości cytatem.
To idzie od górnej lewej do prawej dolnej.
Tutaj, na mojej klawiaturze Mac jest w górnym lewym rogu.
Że znak może być użyty do wykonania polecenia w poleceniu.
Jeśli masz wyrażenie wewnątrz małe cudzysłowy,
że wyrażenie to polecenie, to uruchomić.
Wyjście z tego polecenia
Następnie podstawiony przez cały ekspresji backquote
wewnątrz dłuższy polecenia, które następnie prowadzi z tego wyjścia
jako część ciąg argumentów i tak dalej.
Oto polecenia, które używa tego.
Niech demonstrują działanie tutaj.
Chodźmy tutaj, wyjąć małe cudzysłowy.
Kontrola dostaje mnie na początku linii z składni edycji Emacs.
Jak dotąd ścieżki: jest to, co gdzie robi,
ale kiedy robię to tak, że to korki w tej liście ścieżek
zamiast tej całej wypowiedzi backquote i tras ls-l na nich.
Rodzaj wygodne, prawda?
Więc to jest jeden schludny rzeczą. To, jak działają małe cudzysłowy.
Teraz idziemy w dół nieco dalej.
Są to aliasy. I rzeczywiście z nich korzystać.
Postaram się, aby ten się z 1 operacji edycji.
Ok.
Teraz zobaczmy jak te definicje wyszedł.
alias DSW opowiadał mi, jak to określono.
Zauważ, że to właśnie to, ale zewnętrzne cytaty zostały usunięte
i wykrzyknik zdjęty.
! *, Pełna lista wszystkich argumentów.
W definicji aliasu będzie stosować tam, gdzie tego używać.
DSW ksh bash. Ok.
Zobacz jak to działa? To oszczędza mi pisać.
Chodźmy się trochę tylko wspomnieć coś innego tutaj.
Zawiadomienia o tych różnych pocisków. Powinienem był o tym wspominałem wcześniej.
Csh ma 2 tu i tak nie / bin / tcsh.
Możemy ustalić w inny sposób, że są to w rzeczywistości ten sam plik.
Pamiętam, że mówił po wpisaniu sh masz bash.
Wpisz to i to masz.
Ale te, które nie są powiązane. Ci, mają tam jedno z nich.
I nie jest to rodzaj pliku, który może wywołać kolejne.
To są oddzielne pliki; te C-shell są tym samym plikiem.
Wróć tu, drugi tu, to pseudonim,
pamiętać, że jest to polecenie działa plik.
Że alias działa to. Plik określa typ pliku.
Więc FWH bash ksh. Ok.
To wyjście polecenia plików.
Nie wiem, czy wiesz, co to oznacza tutaj,
Mach-O Universal Binary 2 architektur.
Istnieją 2 możliwe typy procesorów w komputerze Mac
i niektóre programy zostały zapisane w stanie działać z obu
i polecenie Plik może ustalić, że tak, że to, co to oznacza.
Oba te pliki zostały napisane w taki sposób.
Widzimy więc, jak działa alias, widzimy, jak działa backquote,
widzimy, jak rzeczywiste ls lub plik działa.
To może nie działać. Try "gdzie gdzie" i "DSW gdzie". Ok, spróbujmy tego.
gdzie gdzie.
gdzie jest wbudowanym poleceniem powłoki.
Zapamiętaj wcześniej pokazaliśmy, że Bash nie ma gdzie.
Jeśli wpiszesz w którym w basha, pojawi się komunikat o błędzie.
To tylko część powłoki, a nie jest osobnym poleceniem.
Co się stanie, jeśli typem DSW szuka gdzie? Zobacz, co się tam dzieje.
Ran, gdzie, gdzie, ma z tego wyjścia, a następnie próbował uruchomić ls
jak l na gdzie jest powłoka wbudowanych.
gdzie tam jest, ale gdy inne nie istnieją.
Żaden z nich nie istnieje, faktycznie.
Tak, że nie zawsze działa, i to pokazuje także, jak pewne rzeczy
Nie dość tego, co może zrobić, ma pomysł.
Chodźmy trochę dalej tutaj.
To tutaj znajduje się w Bash. To jest również zastąpienie polecenia jak backquote.
Ale w przeciwieństwie do backquote, używa tej zmiennej stylu.
Istnieje wiele określeń, które rozpoczynają się od znaku dolara,
i choć nie są to zmienne, pożyczyli użycie znaku dolara
aby wskazać ekspresję pewnego rodzaju.
Które mogą być otoczony nawiasach lub nawiasach lub podwójnych nawiasach,
która ma inny cel.
Pojedyncze nawiasy są tu podstawienia polecenia, podobnie jak małe cudzysłowy.
Podwójne nawiasy jest rzeczywiście operacja arytmetyczna.
Istnieją inne składnie, inne operacje.
Składnia backquote jest dostępny w Bash.
Jednakże ten jest korzystny. Jest to znacznie łatwiejsze do odczytania i pozwala gniazdowania.
Możesz mieć wewnątrz $ (polecenie) innego polecenia,
coś takiego -
Uzyskać listę tam.
Że będzie działać, jeśli miałem backquote również.
Co zrobić, jeśli chcę zrobić coś takiego -
Prawdopodobnie nie będzie właściwie użyć tego polecenia,
ale ten wewnętrzny podstawienia polecenia echo nazwy wszystkich plików zaczynających się,
to ten jeden działa ls-l na tych plikach,
i wtedy to, po prostu echa wyjście.
Prawdopodobnie nie będzie to zrobić, musisz po prostu zrobić echo lub ls,
ale to pokazuje, jak zagnieżdżanie poleceń działa.
Więc po prostu kolejnym elementem tutaj.
Wspomniałem o tym wcześniej, że gdy masz gdzie w C-shell,
typu prace w muszli typu Bourne'a do lokalizowania poleceń.
Wbudowane komendy, tylko to, co mówię nie.
Polecenia są częścią powłoki, jak w którym.
Gdy powłoka wykonuje polecenia takie jak ls, lokalizuje go przez ścieżkę,
znajdzie go gdzieś w jakimś katalogu,
czytamy, że do pamięci, tworzy nową skorupę,
czyta komendy ls lub co do płaszcza
gdzie zmienne środowiskowe są już położone,
, a następnie przenosi się do realizacji tego.
Wbudowane polecenia, kod dla tego polecenia jest wewnątrz skorupy,
tak rozpoczyna się wykonywanie powłoki tylko część własnego kodu.
gdzie jest takie polecenie. To faktycznie jest szybsze.
Nie trzeba czytać coś w pamięci, to już w pamięci.
Polecenia wbudowane zawsze mają pierwszeństwo przed poleceniami o tej samej nazwie.
Polecenia, które są w katalogach na drodze może mieć tę samą nazwę,
polecenia w różnych katalogach, plików w różnych katalogach.
Jeden, który występuje wcześniej w ścieżce jest jeden dostaniesz.
Jeśli jest wbudowane polecenie, zawsze masz go.
Nie ma sposobu, aby nadać mu niższy priorytet niż polecenia na drodze.
Jeśli chcesz, aby ta ścieżka polecenia, należy wpisać pełną ścieżkę dostępu.
Gdyby nie było polecenie, gdzie w drodze gdzieś,
można wpisać / bin /, gdzie i można by go dostać.
Jeśli nie chcesz wpisywać całą ścieżkę, można zdefiniować alias.
W rzeczywistości, jeśli dał alias taką samą nazwę, co wbudowane polecenie, że to działa
ponieważ definicja aliasu jest oceniany
Przed powłoki określa, że ​​jest wbudowana w którym polecenie powinno zostać wykonane.
Wtedy to robi się trochę bardziej skomplikowana ze tutaj niektórych poleceń.
Przypadku niektórych poleceń są rzeczywiście wbudowanych komend i na ścieżce.
Jednym z nich jest echo, polecenie używałem jakiś czas temu w tych przykładach.
Polecenie echo jest w drodze i to w każdej powłoki.
Oni nie muszą wszyscy zachowują się tak samo.
To był pierwotnie polecenia tylko w ścieżce.
Został zbudowany w celu skorup później.
Bo nie ma opcji, które są zależne od środowiska
i opcje linii poleceń, wbudowane komendy
powstały funkcjonować samo jako polecenia, które zostały w ścieżce
jest mało prawdopodobne, że zostały one napisane w ten sposób
Jeśli polecenie nie zostało już napisane na ścieżce.
Tak więc to nie ma skutków ubocznych. Jego historia ma wpływ tutaj.
Istnieją opcje tam.
Istnieje również opcja zdefiniowana przez zmienną w tcsh nazwie echo_style.
To jedna z tych zmiennych, które mogą zmienić sposób, w jaki ECHO współpracuje.
Są też inne przypadki, w których można przypisać zmienną
, które zmienia sposób, że działanie powłoki, w tym wbudowany polecenia, działa.
To nie wpłynie na nic innego
od innych poleceń nie mają dostępu do zmiennych powłoki,
tylko zmienne środowiskowe.
Ale operacje powłoki może odczytać zmienne powłoki.
, Że nie będą pracować dla csh. To tylko tcsh. To jedno z akcesoriów.
Parsowanie ma sekwencje, kiedy ocenia metaznaki,
gdy ocenia zmienne, aliasy, referencje historia.
Jest konkretna sekwencja dla tych rzeczy.
Jeśli tak, co w określonej kolejności
i dostaje się do czegoś, co jest wyrazem swego
które już badano nie ocenia ponownie.
Jeśli robi się to, to będzie po prostu przejść na bohaterów.
Więc jeśli ocena niektórych wyrażeń, takich jak podstawienie poleceń
lub zmienną, lub co daje podstawę do wyrażenia
które chcesz ocenić,
że będzie działać tylko wtedy, gdy ocena występuje później w sekwencji.
Mam nadzieję, że jest jasne, jestem tam.
Że kolejność analizowania, praca w C-shell,
nie jest taki sam dla wbudowanych poleceń, jak to jest tylko dla wbudowanych poleceń.
Nie jestem pewien o Bash tam.
Na przykład, jeśli zmienna powłoki wytwarzane odniesienie historii,
to prawdopodobnie nie wrócę w historii.
To po prostu się wykrzyknik.
W rzeczywistości, możemy po prostu spróbować się teraz.
set a = i będziemy musieli umieścić to tam.
Oh, wait. Przepraszam. Zrobiłem to w Bash. Chciałem to zrobić tutaj.
Zobacz, więc nie ocenia, że ​​odwołanie Historia
bo to było już po punkcie oceny wyrażeń historii
gdy oceniano zmienną.
Więc to jest 1 efekt parsowania.
I znowu, wbudowane komendy nie są wykonywane w ten sam sposób.
Dobrze. Chodźmy do następnego tutaj.
To ma być 1 linia, ale to co ułatwia czytanie.
Co to robić?
Można przypomnieć, że możemy ocenić gwiazdki jako symbole wieloznaczne nazw plików,
i są jeszcze inne symbole wieloznaczne nazw plików jak znaku zapytania i wyrażeń wspornika.
Tego rodzaju oceny jest nazywany Obsługa masek.
ustawić noglob na początku tego polecenia mówi nie rób tego.
unset noglob mówi wrócić do robienia tego.
Należy pamiętać, że zestaw nie miałby glob ten efekt.
W języku potocznym, ustawić glob lub wyłączony noglob wydaje się być równoważne,
ale tutaj to nie jest. To jest wyłączony noglob.
Teraz tset. tset stanął na zestaw terminala.
To nie jest często używany, że teraz, ale zanim stały się dostępne z oknami systemy
i trzeba było jeden terminal, może trzeba określić typ.
A jeśli coś nadchodzi nad Ethernet lub sieci,
możesz powiedzieć, że to VT100.
VT100 jest swego rodzaju standardem w branży terminali. Pochodzi z terminala z rozkładem.
Jeśli po prostu zrobić dialup - zauważył? To idzie z powrotem drogi, co?
Więc jeśli tylko nie tset tutaj,
jeśli tylko zrobić tset, to resetowanie mój terminal, ale nic nie widział.
To tak naprawdę nie zmienia niczego.
-S
Ok.
setenv TERM xterm-color.
Wiemy już, że termin został ustalony w ten sposób, tak aby nie uległ zmianie.
To jest sposób, że chcemy to zrobić.
Ale zauważ, że to polecenie, tset-y, tylko wyjściowe polecenia te. To nie ich uruchomienia.
To nie te komendy, to wyjście im.
Tak to jest przeznaczone do wytwarzania polecenia, które zostaną uruchomione.
Pamiętacie komendy w tym pliku po prostu pokazał, że masz Q w nim.
Więc zróbmy to.
Q tłumi pewne wyjście, ale to nie ma znaczenia tutaj, jak widać.
Robię tylko to, że aby pokazać, że to nie miało znaczenia.
To jest w składni backquote.
Uwaga na backquote tutaj, backquote tutaj.
Jestem pomijając te rzeczy tutaj.
Są to przypadki mówi, co robić
w przypadku poszczególnych typów terminali -
Ethernet, sieć, dial-up, coś ty.
Nie ma znaczenia tutaj, ponieważ nie jesteśmy rzeczywiście robi żadnej z tych rzeczy.
Ja tylko ilustrujący komendy.
Jeśli zrobię to z backquote, co ja mam dostać?
Również zauważyć tutaj, że są wliczone w zestaw noglob i unset noglob,
tak te są obecnie zbędne w definicji.
Że nie zawsze była prawda, ale teraz są one zawarte w tym poleceniu.
Ale zobaczymy, co się stanie, jeśli to zrobić
i przejść do początku linii w urządzenia i to zrobić.
Ok, ustaw: Polecenie nie znalezione. To trochę dziwne, nie?
Zestaw jest dobrze znana komenda. To część skorupy.
ustaw: Polecenie nie znalezione? Dlaczego tak jest?
Hmm. Cóż, pomyślmy o tym.
To prowadzenie podstawienia polecenia backquote,
i że występuje w pewnej części sekwencji analizowania polecenia.
Zestaw jest wbudowane polecenie.
Tak do czasu, gdy robi to podstawienia polecenia,
to już dostał piłkę do punktu identyfikacji wbudowanych poleceń.
Tak więc zestaw traktuje jak gdyby polecenia w ścieżce.
Nie trzeba dodawać, że nie znajdzie go i pojawi się błąd.
Dobrze. Jest to przykład sekwencji analizowania.
A co zrobimy z tym?
Zauważ, to bardzo ciekawe komendy tutaj, eval.
Zastanawiam się, co to jest.
Jeśli spojrzeć na instrukcji - i niech tak zrobić
pokazać, jak skomplikowane są te podręczniki -
tcsh człowiek, zdezorientowany ręczny, znalezienie rzeczy tutaj nie jest łatwe ani.
Zaczynamy, eval Arg, więc możemy mieć 1 lub więcej argumentów
i tam jest lista rzeczy tam.
Traktuje argumenty, jak wejść do powłoki
i wykonuje polecenia, wynikające w kontekście obecnego powłoki.
To jest zwykle stosowany do wykonywania poleceń generowanych w wyniku komendy
lub zmienna podstawienie ponieważ parsowanie występuje przed tymi substytucji.
Bardzo dobrze.
A tu nawet odnoszą się do polecenia tset do użycia próbki
jak ten właśnie pokazałem.
Teraz muszę się okno z powrotem do użytecznego miejsca.
Chodźmy tutaj i zobaczymy, że eval służy tylko wcześniej.
Zobaczmy więc, co się stanie, jeśli założymy - zaczynamy się strzałkami do tego polecenia
i sterowania do początku, eval.
Ok, więc to działa.
Gdy to zrobisz eval, trwa to, co przychodzi po niego i sprawia, że ​​polecenie.
Pozwala to zasadniczo przetworzyć je dwukrotnie.
Sekcja tutaj działa to polecenie wewnątrz małe cudzysłowy,
dostaje wyjście.
Wyjście ma być uruchamiane jako tych poleceń tu jak te
w tym jednego i tego.
Więc te polecenia są teraz tutaj, w tej kolejności,
ale te są wbudowane polecenia i nie może uzyskać je od razu.
Więc idziemy do eval, eval typów, które się, na nowo rozpoczyna całą sprawę, i to działa.
Przykładem obu backquoting, eval, analizowania, konsekwencje analizowania,
i polecenia, które jest chyba bardzo mało przydatne dla Ciebie w dzisiejszych czasach.
Ok. Dobrze, umask.
Przyjrzyjmy się tej komendy tutaj, umask 022. Zastanawiam się, co to jest.
Po prostu wpisz umask nic po nim. 22. Ok.
022 i zrobić to ponownie.
Jak można się domyślić, umask bez argumentów mówi, aktualną maskę;
umask z argumentów sprawia, że ​​to, ale to był jeden już miałem.
Co oznacza 022 oznacza?
Są tutaj Zabezpieczenia dla pliku.
Określają, kto może czytać i pisać lub uruchomić plik.
Ogrodzenia są nazywane również uprawnienia.
R oznacza odczytu, W dla zapisu,
i x, który jest w nim obecna, oznacza wykonania.
Istnieją 3 kategorie tam.
Ostatnie 3 elementy w kategorii użytkowników. Te odnoszą się do mnie, użytkownika.
Te 3 tutaj odnoszą się do grupy.
1 plik należy do grupy, użytkownik może należeć do wielu grup,
a jeżeli użytkownik jest z grupy, do której należy ten pliku
to te zabezpieczenia będą się do niego stosować, jeśli on nie jest łatwy.
A ten jest każdy inny.
Kategorie te wzajemnie się wykluczają.
Zabezpieczenia użytkowników się do niego stosować,
Zabezpieczenia Grupa stosuje się do członków grupy innych niż użytkownik,
i inne zabezpieczenia stosuje się tylko do osób innych niż użytkownik i członków grupy.
Jeśli istnieje r lub AW lub x, oznacza to, że ochrona jest przyznawana.
Jeśli jest myślnik, oznacza to, że nie jest.
Tam faktycznie są inne rzeczy, które mogą być umieszczone w tutaj oprócz tych,
którym nie będę się do teraz.
Umask określa domyślny dla plików utworzonych.
I jako maska, w zasadzie mówi, że bity nie ustawione.
W jaki sposób to się bity?
Jeśli uważasz, że każdy z nich jako liczba ósemkowa,
to 1s bit jest 2s, to 4S.
Od 0 do 7, tak
opisze co jest kombinacja r., W, a x jest masz do tych 3
i podobna liczba dla nich i dla nich.
Więc 022 dla innych oznacza 0, 2 dla grupy, 2 dla użytkownika.
Ale to jest maska. Maska jest to, czego nie mam.
Przykro mi. Właśnie dałem ci rzeczy w niewłaściwej kolejności.
To pierwsze 3. Te 3 to użytkownik, to 3 są grupy, te 3 są inne.
Przepraszam, że dałem ci to w złej kolejności.
0, co jest pierwszym z nich, nie wyświetla wartość
ale jeśli numer nie istnieje, to jest 0.
Oznacza to, że wszystkie 3 z nich będą mogły.
Zauważ, że w tym konkretnym jednym x nie jest dozwolone.
Powodem jest to, że powłoka jest w stanie określić
czy plik powinien być wykonany, czy nie.
Ponieważ nie jest to plik wykonywalny, nie ustawić X.
W 2 oznacza, że ​​pozwolenie na pisanie, drugą kategorię tutaj,
jeden w środku, jest zabroniony.
Więc jeszcze raz, to są rzeczy, że odmówiono.
Cóż, x jest dozwolone, ale to nie jest tutaj, bo to nie jest wykonywalny
podobnie dla innych.
Więc to jest wspólne umask.
Innym popularnym jest 700 - dać sobie wszystko i nikt inny nic.
A są jeszcze inne możliwości.
Wrócę do tego. Korzystanie z historii można przeszukiwać powrotem do tego, DSW tam.
Ok. Więc, to są muszle.
Bash, właściciel, który jest konto systemowe, może zrobić wszystko.
Grupa i wszyscy mogą czytać lub nie, ale nie pisać wykonać.
Ten nawet nie pozwolić właściciel napisać do niego.
Jeśli właściciel chciał napisać do niego, konta systemowego,
musiałby najpierw zmienić ochronę.
Ale znowu, umask ustawia domyślne poprzez ukrywanie go,
wskazując bity, które nie zostaną wymienione.
Jest to zazwyczaj w jednym z plików inicjowania, co jest. Cshrc dla powłoki C
lub. Profil muszli typu Bourne'a.
Może to być w innym miejscu również wtedy, gdy istnieją inne formaty inicjalizacji systemu.
W każdym razie, to jest umask.
Jest coś, co trochę dziwne tutaj,
i to jest, dlaczego jest jedno polecenie do tego?
Jeśli ja piszę to, chciałbym zrobić to zmienna, umask = jakaś wartość.
Dlaczego jest cała komenda tylko do tego celu?
Powodem jest to po prostu wraca do początków Uniksa.
Unix był jakiś projekt programistyczny w Bell Labs w roku 1970.
Ludzie po prostu się razem z programem.
Oni nigdy nie zamierzał, aby stało się na całym świecie system operacyjny.
Różni ludzie pisali różne części bez myślenia bardzo
w jaki sposób mają zamiar być stosowane - raczej pobieżnie.
I przyszedł razem tak, i to jeszcze jak, że w niektórych aspektach.
Tak, że odzwierciedla historię, i nadal istnieją te niespójności i dziwne elementy niego.
Ok. Następny tutaj.
Jak pisałem wcześniej, C-shell nie jest używana bardzo do programowania,
mimo to tylko możliwe.
To wykonuje się wolniej, ponownie kompromis pomiędzy interaktywnym użyciem
który ma więcej niż prędkość przetwarzania zaangażowany,
które można zrobić bez przetwarzania.
Dodatkowe cechy dodane do powłoki Bourne przez Korna i powłoki Bourne-again
nie wydaje się ich spowolnić, a ja nie wiem, dlaczego tak jest.
To może być tylko lepiej, programowanie, ale nie jestem w stanie wiedzieć.
Przyspieszyć tutaj rzeczywiście nie jest taka wielka sprawa, choć nie są one wymienione.
Powodem jest to, że skrypty powłoki rzeczywiście się dość szybko.
Jeśli istnieje wiele poleceń, jak w programie kalkulacyjnym,
prawdopodobnie nie będzie to zrobić w skrypcie powłoki.
Operacje są dość proste i jednoznaczne.
Te, które mam doświadczenie, które są zbyt powolne
obejmować wielokrotne zastosowania wolnych poleceń.
Wcześniej wspomniałem edytora strumienia sed. Że polecenie jest powolny.
Jeśli wykonasz seda wiele razy, dostaniesz powolne skrypt, ale nie jest to powłoka to powoli.
Działa to w powłoki Bourne'a nie będzie się znacznie szybciej niż uruchomienie go w C-shell,
choć to być może niektóre zalety tam.
Dodatkowe funkcje programowania, z drugiej strony,
są istotne powody, by użyć pocisków typu Bourne'a.
C-shell ma dziwne funkcje do niego -
Fakt, że nie wiem, czy zmienna jest zmienną powłoki lub zmienna.
To może być bardzo mylące.
To nie jest tak łatwo pisać
tylko w oparciu o doświadczenia z programowaniem w innych językach.
Myślę, że może się okazać, pociski typu Bourne'a bardziej zgodne z doświadczeniem.
Niektóre skrypty, chociaż, może być tysiące linii długości.
Te, które widziałem są używane do łatania systemów operacyjnych.
Te mogą wykonywać bardzo powoli, ale nie zabrakło tych, bardzo często.
To tylko wtedy, gdy robisz łatanie,
i to tylko administrator systemu, który robi te rzeczy,
tak, to naprawdę nie jest wiele kwestii.
Te, które są setki linii długo faktycznie wykonać dość szybko.
Wspominając to tutaj, co to są te ulepszenia?
Już wspomniałem kilka z nich - macierze, obliczenia,
z $ () wyrażenie dla obliczeń w basha,
inny rodzaj podstawienia polecenia.
Istnieją różne rodzaje poleceń testowych
przez które można zrobić testy warunkowe na istnieniu pliku lub innych rzeczy.
Trwać tutaj, to polecenie tutaj.
Co to zrobić i dlaczego ktoś go używać?
printenv nazwazmiennej.
Wiemy, co printenv robi. Opowiada nam wartość zmiennej.
I printenv nazwazmiennej nie powie nam bardzo wiele, ponieważ jest zmienna taka nie.
Puste.
Ale dajmy mu coś znaczącego.
Że tam nie ma albo. Ok. Chyba nigdy zdefiniowane.
Po prostu sprawdź mój środowiska.
Jest to kolejne polecenie, w którym można sprawdzić swoje środowisko.
Jest stary, dobry redaktor, jeden widzieliśmy wcześniej.
Co to robić?
Tutaj mamy wyraz backquote.
Pamiętaj, to jest C-shell.
Więc printenv REDAKTOR da nam wartość REDAKCJI. To vi.
I to będzie ustawić tę wartość do zmiennej A, polecenia set.
Więc teraz, jeśli mam zrobić echo $ a, rozumiem vi.
Nie wydaje się to strasznie przydatne.
Jednak faktycznie ma jakiś cel.
Ponieważ nie wiemy, czy zmienna jest zmienną powłoki lub zmienna
za pomocą składni oceny znak dolara, możemy użyć printenv
aby upewnić się, że jest to zmienna.
Więc jeśli nie było powłoki zmienna edytora, by nie dostał go.
To działa tylko z zmiennej środowiskowej.
Jeżeli były zmienne powłoki i chciałem jej wartości,
Będę musiał znaleźć inny sposób, aby to zrobić.
Jednym sposobem na to będzie w ten zestaw i rur.
Jest to jeden z metaznakami znaków specjalnych.
Wysyła sygnał wyjściowy zestaw do czegoś innego.
Zobaczmy, co możemy tam znaleźć.
Nic. Ok. Zobaczymy, co tam jest wszystko razem.
To było echo_style, jeden wcześniej wspomniałem. Dobra, zróbmy to.
Pamiętam, że już wcześniej wspomniano, echo_style
określa sposób będzie działać polecenie echo.
BSD oznacza Distribution Berkeley Standard.
To Berkeley Unix od 1970 roku.
To jeden ze sposobów, że echo można uruchomić.
Ustawianie echo_style do tej wartości w TC-shell spowoduje echa zachowywać się w ten sposób.
Tak ustawione, że nie, ale ustawione dostaje tylko zmiennych powłoki.
Nie byłoby znaleźć wydawcę, który nie jest zmienną powłoki.
Nic.
Więc to jest jeden ze sposobów na ich odróżnienie.
Ale fakt, że trzeba przejść przez jakiś dziwny poleceniem, że
odróżnić zmiennych powłoki i zmienne środowiska
przedstawia rodzaj niepraktyczne charakteru C powłoki dla niektórych zastosowań.
A teraz, ostatni i być może najmniej, jest to, że strony man.
Ci, którzy mogą wiedzieć, człowiek jest krótka komenda dla instrukcji.
Strony man dla powłok są trudne do odczytania. Są bardzo długo.
Są one organizowane w sposób, który może spowodować, że trudno jest znaleźć to, czego szukasz.
Więc jeśli szukasz czegoś z celów,
może nie wiedzieć, jeśli celem jest zmienna powłoki lub coś innego,
więc może nie wiedzieć, gdzie go szukać.
Możesz zajrzeć na różnych strunach, ale struny są często powtarzane.
Więc jest to na ogół trudne do odczytania.
Po prostu spojrzał na stronie man TC-shell trochę wcześniej, aby znaleźć polecenia eval.
Niektóre rzeczy szybciej.
Jednym ze sposobów jest poszukiwanie łańcucha.
Możesz używać pager.
Pager ma ukośnik spojrzeć na polecenie lub ciąg wewnątrz działania pagera.
Człowiek domyślnie użyje pagery, albo być bardziej lub mniej.
Nie wiem, czy jesteś zaznajomiony z tych, ale te pliki mogą pokazać krok po kroku.
Używam MNIEJ, aby wyświetlić te konkretne pliki Mamy tutaj.
Możesz szukać wewnątrz tam.
Możesz spróbować użyć innych ciągów wyszukiwania.
Się strony w różnych systemach operacyjnych mogą nie być takie same.
Mogą być oddzielne strony dla csh i tcsh.
Oni nie są na komputerach Mac, ale mogą one być, jeśli to są oddzielne komendy.
Jeśli sh nie nazwać Bash, zapewne byłaby oddzielna strona człowieka.
Niektóre systemy mają oddzielne strony man tylko dla C-powłoka wbudowanych poleceń.
Czasami, jeśli chcesz przeczytać opis wbudowanego polecenia
to również na drodze, jak echo, trzeba przeczytać stronę man w tym poleceniu na echo
aby ustalić, jak to będzie działać jako wbudowanego polecenia
nawet jeśli nie dzwonisz wbudowanego polecenia.
To wadą systemu operacyjnego w ogóle, się nie tylko na powłokach
choć na muszli w szczególności strony man są dość długie,
częściowo dlatego, że przydatne funkcje zostały dodane do nich, które mogą być dodatnie.
Ok. Czy są jakieś pytania? Wszelkie tematy, które chcesz przywołać?
Wszystko, co istotne tutaj?
Cóż, to było bardzo miłe rozmowy z wami wszystkimi.
Mam nadzieję, że coś z tego seminarium
, które będą przydatne dla Ciebie w przyszłych przedsięwzięciach.
[CS50.TV]