>> [Seminar - Kerang Unix, Persekitaran]
[Douglas Kline - Harvard University]
[Ini adalah CS50. - CS50.TV]
>> Topik hari ini adalah shell Unix.
Saya Douglas Kline, pakar, atau sekurang-kurangnya munasabah pengguna yang cekap, shell.
Shell adalah antara muka pengguna untuk sistem operasi komputer.
Nama ini mengelirukan kerana, tidak seperti shell binatang,
yang sukar dan perlindungan, shell komputer membolehkan komunikasi.
Jadi membran berliang mungkin akan menjadi metafora yang lebih baik.
>> Shell asal untuk Unix adalah shell Bourne.
Bourne dieja B-O-U-R-N-E.
Bourne adalah salah satu pengarang asal Unix,
dan sebagainya shell dinamakan sempena nama beliau.
Nama shell bahawa perintah hanya semata-mata sh.
Itu arahan yang anda boleh melaksanakan.
Shell daftar masuk bermula pada login.
Apabila anda log masuk ke komputer, shell hanya mula berjalan untuk anda,
dan itulah yang mengambil arahan anda.
Ia boleh bermula pada masa yang lain juga.
Jika anda membawa tetingkap tanpa petunjuk lain, ia akan mula shell untuk anda.
Itulah bagaimana ia adalah bahawa anda boleh pergi ke tingkap dan mula menaip arahan
dan sebagainya ada walaupun anda tidak log masuk ke tingkap itu.
Di samping itu, jika anda melakukan login jauh,
maka ia akan mula shell pada komputer jauh.
Dan ia mungkin untuk menjalankan arahan tanpa shell interaktif.
Yang boleh bermakna dalam operasi semasa anda,
dan ia juga boleh bermakna operasi jauh.
Anda boleh menghantar arahan ke komputer lain,
termasuk memulakan shell di sana.
Malah, ia mempunyai untuk memasukkan memulakan shell di sana
walaupun itu bukan tujuan akhir anda.
Apabila sesuatu yang dimulakan seperti ini, ia tidak semestinya memulakan shell baru.
Jika anda membawa tetingkap baru, ia mungkin untuk beritahu kepada membawa penyunting
atau beberapa arahan lain.
Dalam kes itu, editor akan bermula dari bawah.
Apabila editor berakhir, tingkap berakhir.
Ini adalah sedikit luar biasa tetapi ia boleh dilakukan.
Dalam kes tersebut, ia tidak akan cangkerang.
Jadi ia tidak semestinya kes itu bahawa tingkap atau beberapa permohonan itu akan membawa cangkerang.
>> Shell mem-parsing arahan.
Parsing bermakna mengenal pasti pelbagai elemen dan mengelaskan mereka.
Dalam perintah, tali yang lengkap yang anda menaip,
akan ada 1 atau lebih arahan tunggal yang akan dilaksanakan.
Elemen-elemen lain boleh menjadi hujah.
Terdapat juga boleh aksara khas yang menyentuh pelaksanaan perintah.
Mereka boleh menghantar output di tempat lain selain skrin
jika perintah itu pada lazimnya akan hantar ke skrin.
Ia boleh mengarahkan input, ia boleh melakukan perkara-perkara lain juga.
Terdapat pelbagai simbol-simbol lain, watak-watak, dan sebagainya.
Parsing melibatkan mengesan dan mentafsir perkara-perkara.
>> Sekarang jika terdapat tidak lebih soalan, yang agak mungkin kerana tidak ada lebih ramai orang,
kita akan pergi ke laman saya seterusnya di sini.
>> Saya katakan sebelum ini bahawa Bourne shell shell adalah awal.
Ada orang lain.
Satu adalah C-shell. Arahan ini adalah csh.
Nama C-shell hanya mainan kata.
Shell ini telah diperkenalkan dengan Berkeley Unix pada pertengahan 1970-an.
Berkeley Unix adalah satu acara mani dalam pembangunan Unix.
Ia adalah satu revolusi yang besar dan termasuk pengenalan shell ini.
Sebab bagi yang mainan kata, C-shell,
adalah bahawa C-shell mempunyai beberapa ciri-ciri di dalamnya yang menyerupai bahasa C,
mana Bourne shell tidak mempunyai -
atau ia tidak mempunyai pada masa itu.
Terdapat juga TC-shell.
Ini adalah superset C-shell.
Ia mempunyai ciri-ciri tambahan, banyak yang berguna untuk penggunaan interaktif,
seperti menarik balik arahan dalam mekanisme sejarah,
yang saya akan menggambarkan agak lewat -
dengan cara yang mudah, dimodelkan selepas editor.
Ia juga mempunyai pengikatan yang membolehkan anda untuk mengikat tali utama pendek untuk arahan yang lebih lama.
Kami tidak akan masuk ke bahawa hari ini.
Ia mempunyai beberapa ciri-ciri yang berguna untuk pengaturcaraan.
Walau bagaimanapun, C-shell tidak sering digunakan untuk pengaturcaraan shell.
Program Shell, jika anda tidak sudah tahu,
adalah program yang terdiri daripada ciri-ciri shell.
Anda boleh menjalankan ini sebagai program.
Anda menulis sekumpulan arahan shell ke dalam fail dan melaksanakan fail.
Anda tidak perlu untuk menyusun ia. Ini adalah satu bahasa tafsiran.
Ungkapan C-shell kini samar-samar kerana ia mungkin hanya merujuk kepada asal C-shell, csh,
atau semua C-cengkerang, termasuk tcsh. Ia sedikit kabur.
>> A shell kemudian adalah Korn shell, KSH, dinamakan selepas pengaturcara, Korn.
Shell ini cuba untuk memasukkan ke dalam 1 shell
kelebihan C-shell untuk kegunaan interaktif
dan Bourne shell untuk pengaturcaraan.
Ia telah digunakan sebagai shell interaktif oleh sesetengah orang - minoriti.
Kemudian walaupun, terdapat pengenalan yang lain, shell Bash itu, BASH,
lagi mainan kata, Bourne-lagi shell.
Ia merupakan satu lanjutan shell Bourne. Korn shell juga. Kedua-dua mereka berada.
Ia mempunyai tujuan yang sama daripada Korn shell daripada bercantum C-shell ini
dan kelebihan Bourne shell dalam 1 shell.
Banyak penambahbaikan shell Korn yang juga termasuk di dalam Bash.
Bash, bagaimanapun, mempunyai lebih dan kerana itu lebih baik.
The Bourne-lagi shell dan shell Korn dipanggil peluru Bourne-jenis
kerana mereka termasuk ciri-ciri yang Bourne shell ini,
yang serasi dalam beberapa hal dengan C-kerang.
Terdapat cengkerang lain selain mereka, ada yang dimaksudkan untuk penggunaan yang terhad,
mungkin terhad kepada beberapa arahan, mungkin tujuan khusus, tidak sering digunakan.
>> Okay. Item seterusnya di sini.
The Bash shell telah dikaitkan dengan pelbagai bentuk Linux.
Saya tidak pasti jika itu benar bagi setiap bentuk.
Terdapat banyak bentuk di luar sana dan saya tidak menggunakan mereka semua,
tetapi dalam orang-orang yang saya telah menggunakan ia telah menjadi yang berkaitan dengannya.
Setakat yang saya tahu, ada apa-apa tentang Bash
yang menjadikan ia lagi serasi dengan Linux
daripada mana-mana kombinasi lain shell dan sistem operasi.
Saya rasa ini mungkin hanya mencerminkan kecenderungan pengaturcara.
Bahawa ia telah menjadi yang berkaitan dengan Linux adalah satu lagi sebab untuk suka Bash untuk KSH
sejak benda itu mungkin ditulis di dalamnya dan kemungkinan untuk merebak.
Saya akan memberikan sebab-sebab lain untuk itu di kemudian hari.
Skrip shell Bourne perlu dijalankan di bawah shell Korn atau Bash.
Jika anda menulis sesuatu untuk shell Bourne,
anda mungkin boleh melaksanakannya di bawah KSH atau Bash.
Skrip shell Korn mungkin akan berjalan di bawah Bash, tetapi saya tidak dapat menjamin bahawa.
Kemudian di sini, skrip C-shell perlu dijalankan di bawah TC-shell.
C-shell sebenarnya tidak pernah digunakan secara meluas untuk skrip
sejak Bourne shell dan kemudian kerang Bourne-jenis adalah lebih baik untuk tujuan itu.
Jadi yang benar-benar tidak semua yang penting.
Terdapat cukup banyak skrip shell Bourne yang telah ditulis lama dahulu,
sebelum shell Korn atau Bourne-lagi shell telah diperkenalkan.
Mereka masih digunakan, sebahagian daripada sistem operasi,
dan supaya anda akan mendapati mereka jika anda melihat ke dalam sistem operasi
atau beberapa pakej pengaturcaraan lama.
>> Bash adalah sedikit menjadi sejenis lingua franca untuk sistem operasi.
Ia telah pun dipanjangkan kepada Windows dan VMS.
VMS, sekiranya anda tidak tahu, adalah sistem operasi proprietari
Digital Equipment Corporation yang masih digunakan, sebahagian besarnya di belakang tabir.
Dan jika ia akan berjalan di beberapa sistem operasi yang berbeza,
mungkin rakyat cenderung untuk beralih untuk itu.
Tetapi perkembangan ini adalah agak baru-baru ini.
Ia hanya bermula, jadi saya tidak boleh meramalkan jika ini akan berubah untuk benar-benar menjadi yang jenis lingua franca.
Juga, kerana nama laluan fail dan perpustakaan berbeza
antara sistem operasi yang berbeza,
anda mungkin tidak dapat untuk menulis skrip Bash pada satu sistem operasi
dan kemudian berjalan pada satu sama lain.
Anda akan dapat untuk menggerakkannya antara yang berbeza Unix, Linux
Sistem operasi Mac OS tetapi tidak semestinya untuk Windows atau VMS.
Anda mungkin perlu menukar penerangan fail pathname,
dan beberapa perpustakaan mungkin berbeza,
yang boleh menjejaskan cara bahawa beberapa arahan kerja
atau bagaimana mereka memproses hujah-hujah dan sebagainya.
Di samping itu, berhati-hati lain di sini ialah tidak ada jaminan
bahawa semua peluru yang berbeza yang saya sebutkan - Bourne shell, C-shell,
TC-shell, Korn shell, Bourne-lagi shell - boleh didapati di bawah mana-mana Unix
atau Linux atau Mac OS komputer.
Mereka hanya mungkin tidak berada di sana.
Itulah salah satu amaran di sini.
Ia merupakan satu had malang di sini kerana anda ingin perkara untuk bekerja di mana-mana,
tetapi malangnya, anda tidak boleh bergantung kepada itu.
>> Okay. Satu seterusnya di sini.
Katakan anda mahu menulis skrip shell,
program yang terdiri daripada arahan shell.
Anda menulis arahan anda, memasukkannya ke dalam fail, dan melaksanakan fail.
Bagaimana jika anda mahu termasuk hujah?
Dalam kes operasi shell, hujah-hujah yang dipanggil parameter atau parameter kedudukan
dan mereka akan dipanggil dengan tanda dolar dan angka, $ 1, $ 2.
Jadi, jika skrip mempunyai nama ini, hujah pertama saya mungkin hujah 1
dan kedua saya mungkin hujah 2,
dan di dalam skrip saya jika saya ingin merujuk kepada perkara-perkara ini -
mari kita memadam ini kerana saya tidak benar-benar akan menjalankannya -
di dalam skrip saya, saya mungkin mempunyai $ 1 untuk merujuk kepada arg1,
$ 2, yang akan keluar dengan cara itu, arg2.
Jadi mereka simbol yang tersedia untuk merujuk kepada hujah-hujah,
dan mereka memohon kepada semua cengkerang.
Di samping itu, terdapat watak-watak lain.
$ * Merujuk kepada senarai hujah keseluruhan, mereka semua.
$ # Merujuk kepada bilangan hujah.
Sekali lagi, ini terpakai kepada semua cengkerang.
Simbol-simbol, * dan #, boleh digunakan dengan mereka makna di tempat-tempat lain juga.
Kami tidak akan mendapat ke dalam itu.
>> Talian specifier Shell. Apa yang untuk?
Katakan anda telah menulis skrip dan ia untuk shell tertentu dan anda ingin menjalankannya.
Bagaimana anda tahu apa yang shell sistem operasi anda akan gunakan untuk menjalankan skrip anda?
Pada satu ketika anda boleh menganggap bahawa ia akan menjalankannya di shell Bourne
jika anda tidak mengatakan sebaliknya,
tetapi orang yang tidak menulis skrip di Bourne shell bahawa banyak lagi
dan anda tidak dapat bergantung kepada itu lagi.
Jadi di sini kita mempunyai garis specifier shell di sini.
Yang menentukan Bash.
Perhatikan bahawa ia menyatakan ia di pathname itu, / bin / Bash.
Jika komputer mempunyai shell Bash tetapi tidak di dalam direktori tong, / bin, ini tidak akan berfungsi.
Itulah kelayakan yang lain, berhati-hati lain di sini.
Tanda pound adalah aksara baris komen.
Yang terpakai kepada semua cengkerang.
Kes tertentu di sini, #! pada awal skrip, adalah kes khas.
Yang menentukan shell di mana untuk menjalankan skrip.
Seperti yang saya telah berkata, ia mungkin tidak yang sama tempat / bin.
Di samping itu, ada perkara lain di sini.
Jika anda hanya menggunakan tanda pound tanpa tanda seru dan pathname,
yang perlu menunjukkan C-shell.
Walau bagaimanapun, saya tidak mencadangkan melakukannya kerana saya tidak dapat menjamin
bahawa yang akan selalu bekerja.
Jika anda mahu C-shell, ia akan menjadi lebih baik untuk mengatakan demikian.
Kemudian ada sesuatu yang agak mengelirukan di sini.
Jika anda menggunakan talian shell specifier seperti / bin / Bash
dan tempurung yang tidak ada di sana,
tidak ada perkara seperti / bin / Bash pada komputer tersebut,
sama ada kerana ia tidak mempunyai Bash atau kerana ia di lokasi yang berbeza,
anda akan mendapat ralat memberitahu anda bahawa skrip anda berlari tidak wujud.
Dan sudah tentu skrip anda wujud, supaya mesej ralat adalah mengelirukan.
Alasan bahawa sistem operasi memberikan anda ralat yang
atau, lebih tepat lagi, yang shell interaktif anda di mana anda menjalankan ini memberikan ralat yang,
ialah ia melaporkan arahan yang anda digunakan, yang adalah nama skrip.
Perintah yang berkesan dipanggil shell dengan nama skrip.
Itulah di mana anda mendapat mesej ralat yang mengelirukan.
Satu lagi cara untuk memanggil skrip shell
adalah dengan menyatakan shell pada baris arahan, seperti di sini.
Ini adalah perintah. Ini mengatakan menjalankan Bash dan kemudian menjalankan skrip saya dalam Bash.
Yang akan mengatasi garis specifier,
dan ini mempunyai ciri yang membolehkan anda untuk mengadakan peruntukan bagi nama laluan yang berbeza-beza.
Jika anda hanya memberi perintah, sistem operasi akan mencari arahan yang
di pelbagai tempat.
Jika ia ada, ia perlu menemuinya.
Komputer akan mendapati Bash mana-mana jua terletak dan menjalankan,
jadi anda tidak perlu kemudian untuk mengambil berat tentang di mana ia mendapati ia.
Terdapat kebimbangan yang berpotensi lain di sini,
seolah-olah terdapat lebih dari 1 versi Bash, yang mungkin walaupun tidak mungkin.
Jadi, itu satu lagi cara untuk menangani perkara-perkara ini.
Garis specifier boleh memanggil mana-mana shell.
Mereka juga boleh menghubungi perkara-perkara lain daripada cengkerang.
Contoh saya ada di sini adalah sed, yang merupakan editor aliran;
awk, yang merupakan bahasa pemprosesan corak;
dan perl, bahasa skrip yang sangat maju.
Jika anda meletakkan garis specifier menunjukkan salah satu daripada program-program pada permulaan,
ia akan pergi terus ke dalam program yang bukannya bermula cangkerang.
Program-program mempunyai had dengan kebolehan mereka.
Perl adalah sangat mampu. Sed adalah editor. Ia boleh melakukan perkara-perkara di luar hanya mengedit.
Tetapi ia boleh menjadi sukar untuk program itu.
Di samping itu, lulus hujah-hujah dan barangan untuk skrip adalah sama ada mustahil atau mengelirukan.
Jadi dalam kes-kes, dengan awk atau sed, ia, sekurang-kurangnya dalam pengalaman saya,
lebih baik untuk menulis shell skrip dan panggilan awk atau sed dari skrip shell
bukannya memanggil awk atau sed sebagai garis skrip specifier.
Perl adalah bahasa yang pelbagai, seperti yang saya katakan.
Anda tidak boleh menjalankan arahan interaktif dalam perl,
yang bermakna anda tidak boleh menguji bahagian skrip yang anda membangunkan
dengan menjalankan mereka secara interaktif.
Walau bagaimanapun, ia adalah satu bahasa yang sangat mampu
dan telah berkembang menjadi alat yang digunakan secara meluas.
Itu hanya sedikit teguran kurungan kira-kira garis specifier.
>> Dalam semua atau kebanyakan bentuk Linux - sekali lagi, saya tidak boleh pasti bahawa semua -
dan dalam Mac OS, jika anda menaip csh anda mendapat tcsh,
dan jika anda menaip sh anda mendapat sambutan.
Mereka cuba di sana untuk memberikan anda versi yang lebih maju daripada kulit ini,
tetapi ini boleh mengelirukan.
Jika anda menulis skrip menggunakan tcsh atau Bash mempunyai manakala memanggil csh atau sh
dan kemudian cuba untuk menjalankannya pada komputer yang tidak mempunyai tcsh atau Bash,
anda mungkin akan mendapat beberapa kesilapan jika terdapat arahan di sana
mana orang-orang peluru tidak mengenali.
Selain itu, anda mungkin telah dipanggil shell anda ke dalam komputer anda
memanggil ia sebagai sh atau csh dan kemudian mendapat kerang lebih maju.
Anda mungkin tidak memikirkan hakikat bahawa anda menggunakan shell yang lebih maju.
Jadi ini adalah perangkap yang berpotensi.
Bagaimana ia ditubuhkan bahawa jika anda taip sh anda mendapat Bash,
jika anda menaip csh anda mendapat tsch?
Terdapat beberapa perkara di komputer ini dipanggil pautan
yang boleh menyambung untuk memfailkan nama untuk merujuk kepada perkara yang sama.
Ia sama ada boleh menjadi 2 nama untuk fail yang sama atau fail yang tujuan adalah untuk merujuk kepada fail lain.
Mereka dipanggil pautan keras dan simbolik. Kami tidak akan pergi ke itu lagi hari ini.
Mungkin juga terdapat fail yang berasingan - 1 fail sh, 1 fail Bash -
tetapi kedua-dua mereka berjalan Bash.
Kemudian ada kelayakan lain di sini.
Jika anda memanggil salah satu peluru ini dengan satu nama,
anda mungkin fikir anda akan mendapat fungsi yang sama seperti memanggil dengan nama lain.
Nah, yang benar-benar tidak semestinya benar.
Arahan ini boleh memeriksa nama dengan mana mereka dipanggil
dan mereka boleh, atas dasar nama itu, berkelakuan berbeza.
Mungkin ada isu-isu cuba untuk menepati piawaian.
Sebahagian daripada anda mungkin pernah mendengar standard POSIX atau yang lain,
mungkin ciri-ciri lain.
Ini boleh dipilih kadang-kadang dengan hujah-hujah baris arahan
atau dengan menetapkan pembolehubah shell.
Memanggil ia sebagai sh atau Bash sebenarnya boleh membawa kepada pelaksanaan yang berbeza
walaupun ia fail yang sama yang anda melaksanakan.
Satu lagi perkara yang perlu dipertimbangkan ialah bahawa walaupun komputer lain mempunyai tcsh atau Bash,
jika mereka tidak dikaitkan kerana mereka ke dalam komputer anda
jika anda mempunyai komputer tempatan Linux atau Mac OS,
sekali lagi anda akan mendapat kulit yang anda memanggil sh atau csh, bukan satu yang anda mungkin lebih suka.
The Bourne shell semasa mempunyai penambahbaikan yang kurang daripada yang di Bash
tetapi orang-orang di masa lalu shell Bourne asal.
Hasil daripada itu, walaupun shell Bourne semasa, sh,
walaupun ia bukan Bash, menyerupai bahasa C lebih daripada C-shell tidak.
Yang tidak benar apabila C-shell pertama kali diwujudkan, tetapi ia telah dibangunkan dengan cara itu.
Anda mungkin notis di sini bahawa semua nama-nama ini shell kecuali shell Bourne
mempunyai sesuatu untuk menunjukkan yang shell mereka - csh, Bash -
tetapi Bourne shell hanya sh.
Mengapa? Itu adalah shell yang asal.
Ia adalah shell THE kemudian, tidak shell A,
dan kerana ia adalah shell INI, tidak ada sebab untuk membezakan ia daripada shell yang lain.
Jadi itulah sebabnya ia mempunyai nama itu dan masih tidak.
>> Atas ini di sini adalah garis dari pangkalan data kata laluan untuk akaun saya di sana
pada komputer lain.
Saya akan cuba untuk mendapatkan nama yang supaya anda boleh melihat bahagian itu pada akhirnya, cengkerang.
Pangkalan data kata laluan memegang ciri-ciri login untuk semua pengguna.
Pada mulanya adalah nama pengguna, yang anda boleh lihat lepas 2 surat saya sekarang.
Bidang sini dipisahkan oleh titik bertindih.
Bidang lepas, seperti yang anda lihat, adalah bin / tcsh, shell.
Itulah specifier shell.
Ada sesuatu yang menarik di sini.
Apabila Unix mula-mula dibangunkan, terdapat hanya 1 shell,
jadi tidak ada pilihan di sana.
Jadi mengapa mereka membenarkan satu bidang dalam pangkalan data kata laluan untuk tentukan cangkerang?
Saya tidak tahu, tetapi ia bernasib baik kerana mereka lakukan.
Ia agak sukar untuk membuat perubahan dalam format pangkalan data kata laluan
kerana banyak program merujuk kepada format
dan perlu ditulis semula.
Ia adalah satu pembangunan yg menguntungkan atau kebetulan bahawa mereka termasuk bidang itu.
Itu jenis garis fail kata laluan digunakan pada semua komputer Unix dan Linux setakat ini yang saya tahu.
Mac mempunyai sistem sendiri.
Ia sebenarnya mempunyai fail kata laluan dengan garis dalam format tersebut,
tetapi itu tidak adalah di mana ciri-ciri pengguna ditakrifkan.
Satu lagi kenyataan kurungan di sana.
>> Jika anda memanggil shell, anda boleh memanggil ia sebagai sub-shell kerang anda yang sedia ada.
Jadi jika saya pergi sini, mari kita menghilangkan perkara-perkara ini.
Aku di sini di C-shell.
Yang berubah-ubah, yang dengan tepat mengenal pasti shell saya,
sebenarnya tidak selalunya cara yang boleh dipercayai untuk menentukan apa yang shell anda menjalankan,
tetapi dalam kes ini ia adalah.
Bagaimana jika saya hanya menaip -
Kini saya dalam Bash.
Beberapa perkara yang akan menjadi yang sama. ls memberitahu saya arahan saya.
Jika saya yang menggantung kembali ke C-selnya, ls, sama. Betul?
fg, latar depan, kembali ke shell Bash saya.
pwd, direktori semasa, kembali ke C-shell.
pwd, direktori yang berbeza - sebenarnya tidak direktori yang berbeza dalam kes ini.
Ia direktori yang sama.
Katakan saya mahu panggil arahan di sini: di mana ls.
Apakah yang lakukan?
Ia memberitahu saya di mana ls perintah,
salah satu yang memberikan saya senarai direktori, terletak di ls.
Mari kita kembali kepada Bash shell. Mari kita cuba perkara yang sama.
Hmm, menarik di sana, di mana: arahan tidak dijumpai.
Mengapa?
Di mana arahan dibina untuk C-shell.
Ini bukan satu perintah yang perlu dibaca untuk memori dari tempat lain dan dilaksanakan.
C-shell berjalan ia dengan memindahkan pelaksanaan bagi sebahagian daripada kod sendiri
dan ia bukan dalam Bash shell.
Jadi Bash, tidak mempunyai apa-apa arahan terbina dalam, kelihatan untuk itu, tidak merasa,
dan kita mendapat ralat.
Jadi kita ada satu shell Bash berjalan di bawah C-shell, dan kami pada waktu itu sub-shell.
Dan hanya dalam kes anda ingin tahu, Bash shell mempunyai cara tersendiri mencari arahan.
dicincang merujuk kepada fakta bahawa ia boleh dilaksanakan dengan lebih cepat,
didapati dengan lebih cepat.
Itulah salah satu penambahbaikan yang dibina pada kepada beberapa peluru ini.
>> Cengkerang Bourne-jenis disukai untuk pengaturcaraan.
Mereka mempunyai struktur kawalan seperti gelung, kenyataan bersyarat,
jenis arahan yang mungkin anda gunakan dalam bahasa pengaturcaraan seperti C
atau apa sahaja bahasa. Mungkin anda dalam Java atau apa sahaja.
Kerang mempunyai orang-orang juga.
Kerang Bourne-jenis, terutamanya Bash, mempunyai lebih banyak
dan ia direka dengan fleksibiliti yang lebih besar.
The Bash shell mempunyai tatasusunan. The Bourne shell asal tidak.
Jadi yang boleh dengan ketara berfaedah untuk pengaturcaraan.
C-shell sebenarnya tidak mempunyai array tetapi tidak mempunyai banyak ciri-ciri lain.
Kerang Bourne-jenis akan melaksanakan lebih cepat
jika mereka tidak mempunyai ciri-ciri yang dimaksudkan untuk penggunaan interaktif.
Anda memuatkan perkara turun untuk satu tujuan; ini memuatkan mereka ke bawah untuk tujuan lain.
Ada yang keseimbangan di sana.
Ciri-ciri yang dimaksudkan untuk digunakan interaktif
benar-benar adalah penggunaan yang sedikit atau tidak untuk skrip.
Ia mungkin untuk menggunakan sub-shell interaktif seperti yang saya mula ada
menguji arahan yang hendak kamu gunakan dalam skrip.
Itulah apa yang anda tidak boleh lakukan dengan perl. Anda boleh melakukannya dengan peluru.
Malah struktur seperti untuk gelung dan sebagainya boleh dijalankan secara interaktif.
Mereka kadang-kadang berguna untuk menjalankan secara interaktif,
tetapi semakin besar kemungkinan anda menggunakan mereka untuk membangunkan skrip.
>> Alias.
Ini akan menjadi kira-kira C-shell.
Mekanisme sejarah di mana anda kembali ke arahan sebelum ini
atau bahagian-bahagian daripada mereka yang anda telah berjalan.
Sekali lagi, kira-kira C-shell, shell Bourne dan Korn shell mempunyai perkara-perkara,
tetapi saya tidak akan masuk ke dalam mereka.
Jadi di sini adalah beberapa nama samaran yang berguna yang saya ada.
Daripada menaip ls - ia adalah satu perintah yang sama -
hanya taip l dan menyelamatkan diri 1 watak.
ls dengan pelbagai pilihan, kerja-kerja mereka.
Perhatikan bahawa mereka mempunyai definisi sebut harga di sekeliling mereka.
Dalam kes ini, sebut harga yang tidak perlu.
Jika anda boleh menentukan mereka alias tanpa pengikat kata, ia masih akan bekerja.
Mereka adalah disyorkan.
Terdapat situasi di mana anda tidak boleh menggunakan petikan
kerana anda mahu sesuatu yang berlaku yang quote itu akan menghalang.
Kadang-kadang anda boleh quote sebahagian daripada definisi tetapi tidak semua itu.
Ia juga biasanya disyorkan untuk menggunakan tanda petikan tunggal dan bukan petikan berganda.
Sebut harga Double mempunyai kesan ke atas takrif pemboleh ubah,
terutamanya menyebabkan mereka dinilai bukannya berhenti ia.
Mengapa kita akan mahu berhenti penilaian?
Dan bagaimana sebut harga melakukannya untuk kita?
>> Berikut adalah arahan yang mungkin menarik minat anda.
'Ls g *'
g *, kerana anda mungkin tahu, adalah ungkapan wildcard
untuk semua nama-nama fail yang bermula dengan g.
Jika saya hanya menulis dalam arahan ls g *, saya akan mendapat senarai semua nama-nama di dalam direktori semasa saya.
Jika saya menentukan alias kerana ia adalah di sini dengan sebut harga,
ia akan menjalankan perintah yang di dalam direktori semasa anda di mana anda menjalankan ia.
Tetapi jika anda menjalankan definisi alias tanpa sebut harga,
ia akan menilai wildcard g * apabila ia berjalan arahan ini menentukan.
Jadi definisi alias akan ls diikuti dengan senarai fail dalam direktori
di mana arahan alias dilaksanakan,
tidak kira di mana anda benar-benar berhasrat untuk menjalankan arahan.
Ini bukan penggunaan banyak, dan petikan tunggal menghalang penilaian asterisk.
Jadi anda hanya mendapatkan definisi makhluk ls g *.
Kemudian apabila anda menjalankan alias, LGS, ia kemudian meletakkan bahawa.
Sekarang tidak ada sebut harga, dan ia akan menilai asterisk apabila anda menjalankan arahan alias.
Jadi, itu satu perkara.
Petikan berganda akan mempunyai kesan yang sama di sini,
tetapi terdapat kes-kes lain di mana tanda petikan berganda tidak akan bekerja dengan baik.
>> Berikut adalah antara satu sama lain.
Anda mungkin tahu arahan grep ini.
Arahan grep boleh digunakan untuk mengimbas fail untuk talian yang mempunyai tali tertentu.
Jadi mari kita pergi ke sini dan saya akan keluar dari shell Bourne saya.
Okay. Berikut adalah fail.
Katakan ia rentetan abc grep. Terdapat ia.
Jika saya zddd grep, saya mendapat apa-apa. Okay.
Jadi ia mendapati rentetan, ia melaporkan, ia tidak mencari, ia tidak melaporkannya.
Ia output mana-mana garis yang mempunyai tali yang di atasnya.
Terdapat pelbagai pilihan di sini yang boleh anda dapati di dokumentasi.
Berikut adalah satu cara untuk melakukannya.
Apa kira-kira satu ini, alias grabc 'grep abc'?
Itu akan termasuk 1 hujah apabila alias ditakrifkan.
Jadi, jika saya berbuat demikian di sini, sekarang jika saya lakukan grabc,
kini alias termasuk lebih daripada arahan yang mudah. Ia juga mempunyai hujah.
Setakat ini yang bekerja.
Saya mempunyai arahan lain di sini, yang satu ini, jadi mereka adalah wayang yang berbeza di sana
dan menunjukkan bahawa ini tidak mencari apa-apa di sana kerana ia tidak sepadan.
>> Bagaimana jika saya mahu termasuk dalam definisi alias fail yang saya akan mencari
dan saya mahu memberi sebagai alasan untuk alias rentetan yang saya cari?
Saya mungkin mahu mengatakan abc sebagai hujah untuk alias saya,
tetapi alias sudah ditentukan fail.
Dan di mana ungkapan ini datang masuk
Perhatikan di sini kita mempunyai grep seperti dahulu.
Kami mempunyai fail di sini, tali.
\! ^, Jenis ungkapan ganjil, saya rasa, jika anda tidak pernah melihat ini sebelum ini.
Tanda seru adalah sebahagian daripada mekanisme sejarah C-shell.
Ia boleh menarik balik arahan sebelum ini, ia boleh ingat hujah-hujah kepada mereka arahan dan sebagainya.
Mekanisme sejarah digunakan sebagai sebahagian daripada aliasing.
Jika anda menentukan garis selepas tanda seru, ia akan merujuk kepada baris itu dalam senarai sejarah,
yang kami tidak akan masuk ke sekarang kerana ia adalah satu topik lain secara keseluruhan.
Ia adalah mungkin untuk menentukan sebahagian daripada garis.
Jadi! 03:02 akan menjadi hujah kedua bilangan arahan 3.
Tanda sisipan di sini dalam ungkapan ini bermaksud hujah pertama.
Jika anda tidak memberikan petunjuk yang menyuruh anda merujuk kepada,
ia merujuk kepada arahan serta-merta sebelum ini,
dan tanda sisipan itu adalah simbol untuk perdebatan yang pertama.
Oleh kerana ia adalah tanda sisipan dan tidak nombor, anda tidak perlu menggunakan kolon,
begitu! ^ bermakna hujah pertama kepada perintah sebelumnya.
Sedikit bercampur di sini.
Dalam kes ini, apabila anda menggunakan ini sebagai definisi alias,
rujukan sejarah merujuk kembali kepada perintah-perintah di mana alias digunakan.
Jadi ini akan kembali 1 arahan sebagai operasi sejarah,
tetapi sebagai operasi alias ia merujuk kepada arahan di mana anda akan menaip,
berkata, grstrings_file.
Kami mempunyai petikan ini di dalamnya. Apakah garis sendeng terbalik untuk?
Dalam kes ini, seperti di tempat lain, kita tidak mahu untuk melaksanakan mekanisme sejarah
manakala menentukan alias.
Jika kita tidak mempunyai garis sendeng terbalik di sana, shell itu akan menarik dalam hujah pertama
arahan yang betul, sebelum ia berlari ini arahan alias, yang kita tidak mahu.
Kami mahu perkara ini dimasukkan ke dalam perintah alias memanggil hujah kemudian.
Petikan tunggal tidak melarikan diri tanda seru, rujukan sejarah.
Mungkin anda tahu melarikan diri ungkapan bermakna untuk mengubah makna sesuatu.
Dalam kes ini, ia bermakna untuk menghentikan sesuatu daripada mempunyai makna khas.
Makna khas tanda seru itu adalah sejarah.
Melarikan diri dan ia tidak mempunyai makna itu.
Petikan tidak berbuat demikian; garis sendeng terbalik tidak.
Jadi, kita sebenarnya menggunakan 2 tahap melepaskan diri di sini.
Saya akan bergerak arahan ini ke dalam tetingkap yang lain tanpa menaip
dengan menggunakan operasi penyuntingan, yang anda mungkin dapati berguna.
Sesuatu yang lain di sini saya akan menunjukkan kepada anda.
Jika anda hanya perlu menaip alias tanpa hujah, ia memberitahu anda semua hujah-hujah anda.
Ini adalah sekumpulan nama samaran saya sudah mempunyai di sini
selain orang-orang yang saya telah menggunakan di sini hari ini.
Tetapi jika saya hanya menaip dengan nama alias, ia memberitahu saya apa yang dimaksudkan.
Perhatikan petikan hilang dan garis sendeng terbalik itu hilang.
Rentetan ini di sini adalah hasil daripada bahawa definisi alias,
dan kini ia mempunyai hanya! ^ di dalamnya.
Ini akan kelihatan dalam tali fail untuk apa-apa.
Jadi, jika saya lakukan tali grstrings_file, saya tidak memberikan apa-apa untuk mencari di sana,
tetapi ia mencari dalam tali.
Ia tidak mencari tali perkataan dalam tali fail, tetapi ia mencari abc.
Dan ia tidak mendapati bahawa.
Jadi di sini kita memberi hujah yang hits ke dalam takrif alias,
yang dimasukkan ke dalamnya.
Ia adalah di mana ungkapan ini berasal dari.
Anda boleh menggunakan lebih daripada 1.
Tanda sisipan adalah simbol untuk perdebatan yang pertama.
Jika anda mahu menggunakan hujah yang kedua, anda akan berkata: 2.
Tidak ada simbol khas untuk perdebatan yang kedua.
Dan kerana anda menggunakan angka, anda perlu menggunakan kolon.
Terdapat, bagaimanapun, pilihan lain di sini.
Tanda dolar bermaksud hujah lepas.
Dan kerana ini adalah simbol, anda boleh meninggalkan kolon.
Jadi ia akan menjadi hujah yang terakhir dalam senarai.
Dan ada juga yang itu.
Asterisk bermaksud semua, jadi ini adalah senarai hujah yang lengkap,
dan sekali lagi, anda boleh meninggalkan usus besar kerana ia bukan angka yang.
Saya harap anda semua sedang memerhatikan semua ini.
>> Mekanisme sejarah boleh kembali ke garisan sebelum ini dalam senarai sejarah.
Anda boleh melakukan ini dalam definisi alias.
Saya tidak pernah melihat ini dilakukan.
Ia akan mempunyai kesan menarik keluar arahan awal dari senarai sejarah
apabila anda melaksanakan alias, yang boleh arahan yang berbeza
bergantung kepada bila dan di mana anda melaksanakannya.
Pikiran anda mungkin mahu untuk menarik keluar sebutan sedemikian
hanya untuk mengetahui apa perintah yang lebih awal adalah.
Saya tidak pernah melihat ini berlaku.
Saya rasa seseorang mungkin mahu, tetapi ini adalah sangat tidak mungkin.
Terdapat perkara lain di sini.
Jika anda menggunakan bahawa rujukan sejarah-jenis,
barulah hujah-hujah yang ada sebutan sedemikian digunakan.
Jika anda mempunyai definisi alias yang tidak menggunakan rujukan sejarah-jenis,
jika ia hanya menjadi permulaan arahan
dan anda mempunyai hujah lagi, maka apa sahaja yang anda taip selepas itu
akan ditambah kepada arahan.
Dalam kes ini, contoh yang saya hanya memberikan sana, kami menggunakan hujah yang pertama;
kami tidak menggunakan mana-mana orang lain.
Jika hujah-hujah lain telah diberikan pada baris arahan, mereka tidak akan digunakan.
Jadi, jika anda menggunakan rujukan sejarah sama sekali, maka anda mesti menggunakannya untuk mendapatkan mana-mana hujah.
>> Ada satu lagi perkara di sini saya hanya mahu lagi, sebahagiannya sambil lepas,
iaitu bahawa mekanisme sejarah ini dengan tanda seru
kembali kepada C-shell asal.
Tcsh telah memperkenalkan operasi sejarah
yang menggunakan pelbagai arahan dan rentetan dari editor,
sama ada Emacs atau vi.
Pendapat peribadi saya adalah Emacs adalah lebih mudah untuk digunakan untuk tujuan ini
walaupun anda menggunakan vi untuk mengedit biasa anda.
Terdapat pelbagai arahan Emacs yang kini disesuaikan untuk sejarah.
Kawalan P mendapat talian sebelumnya dalam senarai sejarah.
Satu lagi Kawalan P akan membawa anda yang sebelum itu.
Anak panah sehingga melakukan perkara yang sama.
Kawalan N mendapat arahan seterusnya jika anda sudah menatal kembali beberapa cara.
Arrow Down tidak itu juga.
Anda boleh bergerak ke kiri ke kanan dengan anak panah dan pelbagai perkara lain.
Ini boleh menggunakan mekanisme sejarah
lebih mudah daripada menggunakan titik sintaks seru,
tetapi anda tidak akan menggunakan bahawa dalam definisi alias.
Kami akan pergi ke yang sedikit masa lain.
>> Pembolehubah.
Anda tahu apa pembolehubah adalah dalam bahasa pengaturcaraan.
Kerang mempunyai mereka juga.
C-shell menggunakan arahan yang ditetapkan untuk menetapkan pembolehubah,
jadi yang menetapkan pembolehubah untuk nilai b -
seperti yang saya katakan, definisi tidak berguna tetapi ilustrasi bagaimana ini digunakan.
Arahan set akan mewujudkan pembolehubah jika ia tidak sudah wujud.
Parameter kedudukan untuk skrip shell boleh dianggap pembolehubah,
tetapi penggunaan mereka dan kaedah-kaedah bagi mereka adalah agak berbeza.
Anda tidak boleh menetapkan nilai $ 1 dalam perjalanan skrip.
Anda akan perlu menentukan pembolehubah baru bagi maksud itu jika ada di antara kamu mahu.
Type ditetapkan dengan ada hujah dan anda mendapat senarai semua pembolehubah yang kini ditakrif.
Dan mari kita ke shell saya yang lain di sini dan lihat apa yang kita dapat jika kita berbuat demikian.
Agak senarai panjang di sana, betul?
Tatal ke atas sedikit. Lihatlah semua itu.
Sebahagian daripada perkara-perkara yang ditakrifkan secara automatik oleh cengkerang.
Shell mencipta pembolehubah dan memberikan ia satu nilai.
Sebahagian daripada mereka yang ditakrifkan oleh shell tetapi ditakrifkan semula oleh pengguna
mengikut pilihan beliau.
Dan sebahagian daripada mereka yang dicipta oleh pengguna bergantung kepada apa yang dia lakukan hari itu.
Itu hanya menetapkan tanpa hujah.
Ada ciri ganjil di sini perkara ini.
Perlu ada sama ada tiada ruang antara simbol sama dan nama yang berubah-ubah
dan nilai atau ruang pada kedua-dua belah sama setaraf menandatangani,
seperti dalam satu ini.
Ini tidak boleh berfungsi, dan ini sebenarnya adalah perintah yang sah
tetapi ia tidak akan melakukan apa yang anda berniat.
Perintah yang akan berfungsi kerana jika anda hanya mengatakan ditetapkan dan nama berubah-ubah
tanpa tanda sama atau menetapkan dan nama berubah-ubah dengan simbol sama dan tiada nilai,
ia akan menetapkan pembolehubah kepada nilai null.
Jadi menetapkan = adalah arahan yang sah.
Arahan set boleh menentukan lebih daripada 1 pembolehubah pada baris yang sama.
Jadi arahan ini di sini mempunyai kesan menentukan kedua-dua a dan b untuk nol nilai-nilai.
Mungkin apa yang anda mahu.
Yang ini di sini, yang dinyatakan sebelum ini, akan membawa kepada kesilapan
kerana = b bukan ungkapan yang sah.
Nama pembolehubah tidak boleh bermula dengan tanda sama dengan.
Dan ada perkara-perkara ini lebih lanjut di sini.
Ini titik bertindih digunakan untuk memilih hujah-hujah dari garis sejarah,
dan ia boleh digunakan - dan saya tidak pergi ke sebelum - untuk mengubah suai perkara-perkara.
Mereka juga boleh digunakan untuk mengubah suai pembolehubah shell.
Yang ini di sini, $ a, mempunyai nilai.
: R akan bermula lanjutan.
Lanjutan akan apa-apa berikut titik,
titik dan apa-apa berikutnya pada akhir fail,
hanya di akhir senarai selepas dipotong lepas.
Jadi saya perlu di sini.
adalah itu. Ia akan menggugurkan. O.
Jika ada tiada sambungan, hanya nama laluan selepas dipotong lepas, ia tidak akan mempunyai kesan.
a: h, bahawa ungkapan berubah-ubah, akan berlepas elemen terakhir senarai direktori,
lagi, hanya selepas dipotong lepas.
Jadi / a / b / c menjadi / a / b,
tetapi yang satu ini berubah kerana unsur selepas senarai itu adalah batal.
Di sini ada sesuatu yang juga saya ingin menekankan.
Ini kelayakan tidak mencari kewujudan fail-fail ini.
Mereka hanya mencari tali.
Ini adalah bertujuan untuk memanipulasi nama fail, nama laluan,
tetapi mereka boleh digunakan pada mana-mana tali walaupun ia bukan satu nama fail.
Dan mereka tidak mencari kewujudan,
jadi jika ada fail tersebut, / a / b / c, ini akan masih bekerja.
Sama ada apa-apa penggunaan adalah soalan lain, tetapi ia masih akan berfungsi.
Pemboleh ubah ini berbeza dalam cengkerang Bourne. Kami akan mendapat yang kemudian.
Tanda dolar boleh melarikan diri sama seperti tanda seru dan asterisk.
Tanda dolar boleh melarikan diri dengan garis sendeng terbalik atau petikan tunggal.
Sebut harga Double mempunyai kesan yang ganjil dalam semua cengkerang
memaksa penilaian dolar menandatangani ungkapan berubah-ubah.
Jadi, jika ia sedang melarikan diri satu cara, memetik dua boleh mempunyai kesan yang
menyebabkan ia perlu dinilai juga.
Ini adalah sedikit mengelirukan.
Jika terdapat beberapa tahap melepaskan diri, seperti petikan tunggal di dalam tanda petikan berganda
atau petikan berganda dalam tanda petikan tunggal, anda perlu menguji untuk melihat apa yang akan berlaku
ke pembolehubah jika anda menggunakan satu.
Mereka 2 situasi - di dalam dua tunggal, di dalam satu daripada dua -
tidak semestinya memberikan keputusan yang sama.
Pembolehubah persekitaran, terikat pembolehubah C-shell.
Pembolehubah persekitaran juga pembolehubah dalam C-shell,
dan mereka juga adalah pembolehubah dalam cengkerang lain juga.
Dalam C-shell, mereka adalah set yang berbeza.
Perkara-perkara yang saya katakan sebelum ini tentang pembolehubah shell.
Pembolehubah persekitaran adalah satu set yang berbeza pembolehubah
kecuali beberapa pembolehubah yang kita panggil pembolehubah terikat,
yang amat penting dan kami akan masuk ke dalam orang-orang kemudian.
Pembolehubah persekitaran secara automatik diluluskan pada
untuk cengkerang atau arahan yang dijalankan dari shell anda.
Perkara-perkara lain tidak. Pembolehubah shell, alias tidak. Pembolehubah persekitaran berada.
Itulah sebabnya kita memanggil mereka pembolehubah persekitaran,
idea adalah bahawa alam sekitar memanjangkan lalu hanya shell semasa anda.
Mereka boleh digunakan untuk menentukan perkara-perkara untuk arahan.
Berikut adalah satu contoh. PRINTER, LPDEST.
Kedua-dua mereka boleh menentukan pembolehubah pencetak yang perintah akan gunakan untuk mencetak sesuatu.
Jika ada banyak pencetak di sekeliling, anda mungkin mahu meletakkan satu yang anda suka.
Sebab kita mempunyai 2 pembolehubah ialah set arahan telah ditulis
menggunakan data yang berbeza.
Anda mungkin memberikan mereka nilai-nilai yang berbeza.
Kemungkinan besar anda akan memberikan mereka kedua-dua nilai yang sama.
Perkara-perkara yang bekerja kerana arahan yang melakukan percetakan
telah diprogramkan untuk mengkaji nilai pembolehubah.
Jika program yang tidak ditulis dengan cara itu, jika ia ditulis untuk melakukan sesuatu yang lain,
pembolehubah akan menjadi tidak relevan.
Jadi sistem operasi tidak mencari pembolehubah
setiap kali anda merujuk kepada pencetak.
Satu perintah yang tidak percetakan sedang mencari pembolehubah jika ia diprogramkan dengan cara itu.
Pembolehubah ini sering ditakrifkan dalam fail pemula anda
tetapi tidak semestinya.
Anda boleh menentukan mereka pada baris arahan.
Mereka boleh ditakrifkan dalam perintah.
Satu perintah yang berjalan sesuatu yang mungkin pilihan sendiri pembolehubah -
pembolehubah yang unik kepada pakej perisian tertentu, sebagai contoh.
Mereka akan ditakrifkan apabila anda menjalankan pakej itu.
Bagaimana pemboleh ubah ini diserahkan kepada sub-shell?
Apabila sub-shell ditulis, tidak menulis ke dalam kawasan itu.
Kawasan sub-shell yang dikhaskan untuk pembolehubah persekitaran
tidak ditulis oleh sub-shell, ia ditulis dengan meniru.
Apabila anda menjalankan arahan biasa, seperti arahan ini untuk mencetak atau apa sahaja,
mereka memulakan dengan mewujudkan satu shell baru.
Shell mewujudkan shell dan kemudian menulis ganti sebahagian daripadanya
dengan arahan yang anda menjalankan, yang adalah sedikit mengelirukan,
tetapi itulah bagaimana arahan ini mendapatkan pembolehubah persekitaran
yang kemudiannya merujuk kepada di kemudian hari.
Arahan di sini untuk menentukan setenv yang berubah-ubah.
Itulah bagaimana anda menentukan ia. Ia adalah 3 unsur: setenv, berubah-ubah, nilai.
Jika anda hanya setenv tanpa hujah, apa yang kamu dapat?
Senarai semua orang-orang pembolehubah.
Sekali lagi, ia satu senarai panjang yang bagus dan dalam kes ini, seperti dalam yang lain,
pemboleh ubah ini ditakrifkan sebahagian besarnya melalui kuat login saya dengan shell itu sendiri
bukan oleh apa-apa yang saya lakukan.
Ada arahan lain di sini, printenv.
Yang juga akan paparkan alam sekitar.
Perhatikan perkara ini terakhir di sini, = EDITOR vi.
Yang mengatakan bahawa jika saya menggunakan sesuatu yang menyeru penyunting
dan saya tidak menentukan penyunting dan ia membolehkan saya pilihan, ia boleh memberikan saya vi.
Bagaimana jika saya lakukan EDITOR printenv? Ia memberitahu saya apa yang ada.
Hak sebelum itu, terdapat satu pemboleh ubah, KURANG.
Ini adalah pilihan yang mungkir anda apabila saya jalankan arahan KURANG,
yang memaparkan fail.
Jadi, jika saya berbuat demikian, printenv boleh mengambil 1 hujah atau 0 hujah,
tidak lebih daripada 1.
Terdapat arahan lain juga, tetapi kita tidak akan masuk ke dalam semua hari ini bahawa.
Ingat terdapat Penukar untuk pemboleh ubah shell seperti: h,
yang akan jatuh elemen terakhir pathname yang,
atau: r, yang akan jatuh lanjutan.
Mereka kini memohon kepada pembolehubah persekitaran juga. Mereka tidak biasa.
Ia digunakan untuk menjadi mereka tidak boleh diubah suai. Sekarang mereka boleh.
Ia adalah salah satu kemajuan dengan perkembangan kerang selama ini.
Aku hanya berkata bahawa peluru sebagai sebahagian daripada persekitaran
dan pembolehubah shell dalam C-kerangan, dengan beberapa pengecualian, set yang berbeza.
Anda boleh mewujudkan satu pembolehubah persekitaran dan pembolehubah shell dengan nama yang sama.
Mereka akan pembolehubah yang berbeza, mereka boleh mempunyai nilai-nilai yang berbeza.
Menukar nilai satu tidak akan menukar nilai yang lain.
Pembolehubah ini semua dinilai dengan tanda dolar - $ a, $ apa sahaja.
Jadi apa jika anda mempunyai ini? Adakah anda tahu mana yang anda dapat?
Dalam ujian saya, saya mendapat ubah shell,
tetapi ini tidak didokumenkan dan anda tidak boleh bergantung kepada itu.
Jadi saya bertanya kepada anda, mewujudkan shell dan persekitaran pembolehubah
dengan nama yang sama idea yang baik? No Okay.
Apakah pengecualian utama di mana alam sekitar dan shell pembolehubah
dikaitkan dengan satu sama lain?
Terdapat ini 4.
Huruf persekitaran JANGKA berubah-ubah,
shell jangka ubah dalam huruf kecil, jenis emulasi terminal.
Saya hanya akan pergi ke sini dan saya akan melakukan gema, arahan yang berguna di sini,
$ $ JANGKA panjang. Dan di sana.
xterm adalah sejenis terminal untuk tingkap dipaparkan dalam Sistem x Window.
xterm-warna variasi dari yang yang membolehkan warna yang berbeza.
Mengapa kita menentukan ini? Apakah ini baik untuk?
Arahan yang menyusun semula skrin seperti editor
menghantar urutan tertentu, yang dipanggil urutan melarikan diri,
kepada terminal atau tingkap untuk menyusun semula dan sebagainya.
Mereka urutan adalah berbeza untuk pelbagai jenis terminal.
Ini memberitahu ia yang mana untuk digunakan.
Kadang-kadang ada isu-isu di sana.
Anda mungkin mahu mengubah itu.
Jika perkara-perkara yang tidak berfungsi, kadang-kadang jenis terminal ditetapkan salah,
anda mungkin boleh memperbaikinya dengan mentakrifkan pembolehubah istilah ini.
Dalam kes ini, perubahan satu pembolehubah, pembolehubah persekitaran pembolehubah shell,
perlu mengubah yang lain.
Saya telah mendapati melalui pengalaman bahawa perubahan JANGKA dalam huruf besar
tidak selalu menukar shell jangka ubah dalam huruf kecil.
Ini adalah bug.
Saya tidak tahu jika itu sentiasa benar. Kebanyakan masa ia tidak benar, tetapi ia boleh.
Jadi jika anda membuat perubahan, hanya cek yang keluar.
Ia tidak selalunya bahawa anda perlu menukar nilai itu, tetapi sekali-sekala anda lakukan.
PENGGUNA pembolehubah persekitaran.
Sekali lagi, pembolehubah persekitaran dalam huruf besar, shell ubah dalam huruf kecil.
Ini adalah nama pengguna anda.
Ia hanya di bawah keadaan yang sangat luar biasa
yang anda mahu untuk mengubah itu.
Jika nama pengguna anda adalah orang lain, ia boleh membuang segala macam perkara luar.
Direktori rumah, direktori rumah pengguna.
Sekali lagi, anda tidak akan mahu untuk mengubah itu.
Perhatikan dalam semua kes-kes ini dan yang kita kira-kira untuk menutup, ubah jalan,
pembolehubah persekitaran adalah dalam huruf besar dan shell pembolehubah terikat adalah dalam huruf kecil.
Jika anda menukar satu, anda perlu mengubah yang lain.
Ini jenis mengikat tidak boleh ditubuhkan kerana anda tidak boleh mengikat 2 pembolehubah,
selain daripada ini 4, dan mengikat dalam pembolehubah ini tidak boleh dibuat asal,
anda tidak boleh memisahkan mereka.
Jadi ini 4 pasangan pembolehubah terikat.
Mereka akan sentiasa. Tiada orang lain akan.
Di samping itu, ia akan menjadi mustahil untuk mencipta pembolehubah dengan nama yang sama
jenis bertentangan.
Anda boleh membuat jangka ubah shell dalam huruf kecil
atau persekitaran yang berubah-ubah JANGKA huruf besar.
Pemboleh ubah akan bebas daripada pembolehubah berpasangan
dan mereka akan bebas daripada satu sama lain.
Saya tidak boleh bayangkan mengapa anda akan berbuat demikian melainkan jika anda mahu untuk mengelirukan rakyat.
Yang ini di sini, jalan berubah-ubah, ini adalah satu yang benar-benar penting.
Satu lagi perkara di sini adalah bahawa tidak mungkin kes-kes
pembolehubah dengan nama-nama dipasangkan sama yang tidak terikat antara satu sama lain.
Tidak akan pembolehubah, SHELL dan shell, di ibu dan kecil huruf.
Berdasarkan nama itu, anda tidak tahu jika pembolehubah yang berubah-ubah shell
atau pembolehubah persekitaran, dan mereka tidak terikat antara satu sama lain.
Jadi yang jenis nama-nama berpasangan tidak membayangkan pembolehubah terikat.
Pembolehubah jalan, yang saya telah menunjukkan sebelum ini,
adalah senarai nama laluan di mana kulit kelihatan untuk arahan.
Mari kita ke tingkap ini di sini dan kami akan melakukan $ echo PATH, huruf besar -
pembolehubah persekitaran - echo $ jalan, surat kecil - shell berubah-ubah.
Perhatikan bahawa senarai direktori adalah sama. Ini adalah terikat.
Tukar satu, anda menukar lain.
Dalam pembolehubah persekitaran unsur-unsur yang dipisahkan oleh titik bertindih. Notis itu.
Pembolehubah shell dipisahkan oleh ruang.
Pemboleh ubah persekitaran adalah rentetan tunggal.
Pembolehubah shell adalah array.
The Bourne shell tidak mempunyai tatasusunan.
Bash tidak, tetapi ini sudah sebahagian tetap daripada cengkerang.
Ini adalah rentetan tunggal dan tidak array.
C-shell sentiasa mempunyai tatasusunan.
Tatasusunan adalah lebih mudah untuk bekerja dengan.
Anda boleh merujuk kepada bahagian-bahagian itu.
$ Laluan Jadi echo [1] dan saya mendapat / usr / bin, elemen pertama.
Sekali lagi, ingat dolar tanda bermaksud elemen terakhir dalam senarai sejarah.
Apa yang berlaku di sana? Ia cuba untuk mencari tanda dolar sebagai simbol berubah-ubah.
Saya melepaskan diri. Oops. Ia tidak akan mengambil masa yang sama ada.
Sebahagian daripada perkara yang tidak berfungsi dengan baik.
Mungkin kita hanya akan meninggalkan bahawa.
Asterisk merujuk kepada perkara keseluruhan, tetapi itulah yang anda dapat jika anda tidak menentukan unsur.
Satu lagi cara yang pelbagai pembolehubah boleh dimanipulasi,
beberapa elemen di sana, 7 elemen.
Di sini kita meletakkan tanda pound sebelum nama berubah-ubah.
Berikut adalah satu sama lain. Letakkan tanda tanya di sana.
Itulah nilai yang logik. Yang menunjukkan bahawa pemboleh ubah itu wujud.
Ia satu lagi cara bekerja dengan pembolehubah.
Yang, dengan cara itu, tidak perlu menjadi seorang pembolehubah array.
Yang boleh mana-mana berubah-ubah.
Dan jika saya lakukan, tidak ada yang berubah-ubah itu dan saya mendapat 0.
Satu lagi perkara yang kecil di sana kira-kira penilaian berubah-ubah.
Kembali ke sini kerana di sini, jika untuk beberapa sebab anda mahu bekerja dengan ini
daripada bekerja dengan pelbagai, pembolehubah shell,
terdapat arahan yang boleh memisahkan perkara-perkara ini berdasarkan kolon.
Malah, jika anda akan melakukan ini dalam Bash shell mungkin,
beberapa jenis skrip, yang akan mungkin bagaimana anda akan melakukannya.
Tetapi dalam C-shell ia lebih mudah untuk digunakan array.
Dalam Bourne shell, pemboleh ubah yang diberikan oleh ungkapan tunggal seperti ini,
seperti cara yang anda mungkin menetapkan variable di dalam bahasa pengaturcaraan,
dan di sini, jangan sampai ada ruang.
Ia perlu bahawa ia hanya 1 tali.
Dalam kerang Bourne-jenis, semua pembolehubah adalah pembolehubah shell.
Pembolehubah persekitaran adalah subset pembolehubah shell.
Mereka dibezakan dari pembolehubah bukan alam dengan mengeksport.
Arahan untuk melakukannya adalah eksport, seperti PRINTER eksport.
Jika kita untuk menentukan apa-apa pembolehubah,
jika kita mahukan perintah percetakan untuk merasa, ia akan menjadi pembolehubah alam sekitar,
dan bagaimana kita membuat ia satu.
Di sini ada sesuatu jenis mengelirukan.
Ungkapan ini, eksport kepada alam sekitar, berasal dari konsep shell Bourne,
tetapi ungkapan itu digunakan dalam perihal C-shell,
jika tiada arahan seperti eksport.
Jika anda hanya berkata eksport dengan sendirinya, anda akan mendapat senarai dieksport -
Jadi jika saya hanya mengeksport sini, tidak ada benda itu.
Okay, ada kita pergi.
Perkara-perkara ini, dengan cara itu, juga ditakrifkan oleh cengkerang.
Saya tidak menentukan mana-mana oleh saya sendiri.
Shell ini melakukan segala macam perkara dengan sendirinya.
Ia harus melakukan perkara-perkara secara automatik.
Dalam Bash atau Korn shell, anda boleh menjalankan arahan seperti ini,
yang kedua-duanya akan memberi ubah nilai dan mengeksport dalam 1 arahan.
Dalam shell Bourne yang mereka perlu arahan berasingan seperti eksport.
Berikut adalah satu lagi aspek yang mengelirukan.
Arahan set dalam C-shell mentakrifkan pembolehubah
dan tanpa hujah memberitahu anda apa nilai-nilai pembolehubah 'adalah.
Dalam Bash shell, arahan yang ditetapkan dengan ada hujah melakukan perkara yang sama,
tetapi dengan hujah-hujah yang ia sesuatu yang agak berbeza.
Jadi ini adalah pelbagai hujah-hujah di sini.
Sebahagian daripada ini adalah pembolehubah alam sekitar, sebahagian daripada mereka adalah pembolehubah shell.
Kesemua mereka adalah pembolehubah shell benar-benar. Sesetengah daripada mereka adalah pemboleh ubah persekitaran.
Arahan set dengan hujah-hujah yang boleh digunakan untuk mengendalikan
kepada parameter kedudukan untuk skrip,
yang merupakan cara untuk mendapatkan mereka semua sekali gus.
Kita tidak boleh benar-benar pergi ke hari ini bahawa.
Ia juga boleh digunakan untuk mengubah tingkah laku shell.
Terutamanya dalam Bash terdapat pembolehubah yang akan menentukan bagaimana shell itu berkelakuan.
Kemudian juga hanya ini satu arahan yang mungkin anda lihat, arahan ini.
Disettaip diikuti oleh pembolehubah dan jenis boleh ubah digunakan dalam Korn dan Bash cengkerang.
Ia bukan wajib tetapi ia boleh digunakan untuk menyekat nilai-nilai pembolehubah,
yang boleh berguna untuk mengelakkan kesilapan, dan ia perkara biasa.
Jadi saya hanya menyebut bahawa sekiranya anda melihatnya di suatu tempat.
Arahan di mana.
Ingat saya nyatakan sebelum ini di mana arahan dalam C-shell,
yang boleh memberitahu anda lokasi yang pathname arahan.
Berikut adalah penggantian arahan.
Anda perlu mencari di keyboard anda di suatu tempat watak yang kelihatan seperti ini.
Lokasi pada keyboard akan berbeza-beza.
Kami telah memanggilnya backquote. Ia kira-kira saiz sebut harga.
Ia pergi dari kiri atas untuk menurunkan betul.
Di sini pada keyboard Mac saya ia di sudut kiri sebelah.
Watak yang boleh digunakan untuk melaksanakan arahan dalam perintah.
Jika anda mempunyai satu ungkapan dalam backquotes,
ungkapan itu adalah perintah, ia berjalan.
Output arahan yang
kemudiannya digantikan dengan ungkapan backquote keseluruhan
di dalam arahan yang lebih lama yang kemudiannya berjalan dengan output yang
sebagai sebahagian daripada rentetan daripada hujah-hujah dan sebagainya.
Berikut adalah arahan yang menggunakan itu.
Mari kita menunjukkan operasi di sini.
Mari kita pergi di sini, mengambil yang backquotes.
Kawalan A mendapat saya ke permulaan baris dengan Emacs editing sintaksis.
Setakat ini nama laluan adalah apa yang mana tidak,
tetapi apabila saya melakukannya seperti ini, ia kemudian palam dalam bahawa senarai nama laluan
di tempat ini ungkapan backquote keseluruhan dan berjalan ls-l ke atas mereka.
Jenis mudah, kan?
Jadi itu satu perkara kemas. Begitulah backquotes bekerja.
Sekarang mari kita turun ke bawah sedikit lagi.
Ini adalah nama samaran. Saya sebenarnya menggunakan ini.
Saya akan cuba untuk mendapatkan di ini dengan 1 operasi penyuntingan.
Okay.
Sekarang mari kita lihat bagaimana mereka definisi keluar.
alias LWH memberitahu saya bagaimana ia ditakrifkan.
Notis ia hanya ini, tetapi memetik luar telah diambil kira
dan tanda seru itu diambil kira.
! *, Senarai lengkap semua hujah.
Dalam definisi alias ia akan memohon kembali ke mana saya menggunakan ini.
LWH KSH Bash. Okay.
Lihat bagaimana yang bekerja? Ia menjimatkan saya beberapa menaip.
Mari kita naik sedikit hanya untuk menyebut sesuatu yang berlainan di sini.
Perhatikan di sini ini cengkerang yang berbeza. Saya sepatutnya disebut sebelum ini.
Csh ini mempunyai 2 di sini dan begitu juga / bin / tcsh.
Kita boleh menubuhkan dengan cara lain bahawa mereka adalah benar-benar fail yang sama.
Ingat saya katakan jika anda menaip sh anda mendapat sambutan.
Menaip ini dan anda mendapatkan ini.
Tetapi mereka tidak dikaitkan. Mereka mempunyai yang tunggal di sana.
Dan ini bukanlah jenis fail yang boleh memanggil satu sama lain.
Jadi mereka adalah fail berasingan; yang C-kerangan fail yang sama.
Kembali ke bawah di sini, yang lain di sini, alias ini,
ambil perhatian bahawa berjalan arahan ini, fail.
Alias ​​yang berjalan itu. Fail memberitahu anda jenis fail.
Bash KSH Jadi FWH. Okay.
Itulah output arahan fail.
Saya tidak tahu jika anda tahu apa ini bermakna di sini,
Mach-O binari sejagat dengan 2 seni bina.
Terdapat 2 jenis pemproses mungkin dalam Mac,
dan beberapa program ditulis untuk dapat berjalan dengan kedua-duanya,
dan perintah fail boleh menentukan bahawa, supaya apa yang dimaksudkan.
Kedua-dua fail-fail ini telah ditulis dengan cara itu.
Oleh itu, kita melihat bagaimana alias kerja-kerja, kita lihat bagaimana backquote kerja-kerja,
kita melihat bagaimana ls fail sebenar atau fail berfungsi.
Ini mungkin tidak berfungsi. Cuba "di mana di mana" dan "LWH mana". Okay, mari kita cuba itu.
di mana di mana.
di mana adalah shell terbina dalam.
Ingat sebelum ini kami menunjukkan bahawa Bash tidak mempunyai mana.
Jika anda menaip di mana dalam Bash shell, anda akan mendapat mesej ralat.
Ia hanya sebahagian daripada kulit dan bukannya arahan yang berasingan.
Apakah yang akan berlaku jika saya menaip LWH mencari di mana? Lihat apa yang berlaku di sana.
Berlari di mana mana, mendapat output ini, dan kemudian cuba melarikan ls
sebagai l di mana adalah shell terbina dalam.
mana ada, tetapi yang lain tidak wujud.
Tiada seorang pun daripada ini wujud, sebenarnya.
Supaya tidak sentiasa bekerja, dan ia juga menggambarkan bagaimana beberapa perkara
tidak melakukan cukup apa yang anda mungkin berfikir.
Mari kita turun sedikit lagi di sini.
Ini di sini adalah dalam Bash. Itu juga merupakan penggantian arahan seperti backquote itu.
Tetapi tidak seperti backquote, ia menggunakan gaya berubah-ubah ini.
Terdapat beberapa ungkapan yang bermula dengan tanda dolar,
dan semasa ini tidak pembolehubah, mereka meminjam penggunaan tanda dolar
untuk menunjukkan satu ungkapan dari beberapa jenis.
Yang boleh dikelilingi dengan kurungan atau kurungan atau kurungan berganda,
yang mempunyai tujuan yang berbeza.
Kurungan tunggal di sini adalah penggantian arahan sama seperti backquotes.
Kurungan Double sebenarnya operasi aritmetik.
Terdapat sintaks lain, operasi lain.
Sintaks Backquote boleh didapati dalam Bash.
Walau bagaimanapun, ini adalah lebih baik. Ia lebih mudah untuk membaca dan ia membolehkan bersarang.
Anda boleh mempunyai di dalam (arahan) $ arahan lain,
sesuatu seperti -
Saya mendapat senarai di sana.
Yang akan bekerja jika saya mempunyai backquote juga.
Bagaimana jika saya mahu melakukan sesuatu seperti -
Anda mungkin tidak akan benar-benar menggunakan arahan ini,
tetapi ini penggantian arahan dalaman gema nama semua fail yang bermula dengan a,
maka satu ini berjalan ls-l pada fail-fail,
dan kemudian satu ini hanya gema output.
Anda mungkin tidak akan melakukan ini, anda hanya akan melakukannya gema atau ls,
tetapi ini menggambarkan bagaimana bersarang arahan berfungsi.
Jadi hanya ciri lain di sini.
Yang saya sebutkan ini lebih awal, bahawa apabila anda mempunyai jika pada C-shell,
menaip kerja-kerja dalam cengkerang Bourne-jenis untuk mencari arahan.
Arahan dalaman, hanya apa yang saya katakan di sana.
Arahan adalah sebahagian daripada kulit, seperti di mana.
Apabila shell melaksanakan arahan seperti ls, ia menempatkan ia melalui jalan yang,
mendapati dalam beberapa direktori di suatu tempat,
berbunyi bahawa ke dalam ingatan, mewujudkan shell baru,
membaca arahan ls atau apa sahaja ke dalam shell
di mana pembolehubah persekitaran sudah terletak,
dan kemudian ia memindahkan pelaksanaan kepadanya.
Terbina dalam arahan, kod untuk arahan yang berada di dalam shell,
jadi shell hanya bermula melaksanakan sebahagian daripada kod sendiri.
di mana arahan tersebut. Ia sebenarnya mendapat lebih cepat.
Ia tidak perlu membaca apa-apa dalam ingatan; ia sudah dalam ingatan.
Arahan dalaman sentiasa mengatasi arahan dengan nama yang sama.
Arahan yang di direktori di jalan yang mungkin mempunyai nama yang sama,
perintah di dalam direktori yang berbeza, files dalam direktori yang berbeza.
Antara perkara yang berlaku sebelum ini di jalan yang adalah yang anda akan mendapat.
Jika terdapat arahan terbina dalam, anda sentiasa mendapatkannya.
Tidak ada cara untuk memberikan keutamaan yang lebih rendah daripada arahan di jalan.
Jika anda ingin mendapatkan bahawa perintah jalan, anda boleh menaip pathname penuh.
Jika terdapat arahan di mana di jalan di suatu tempat,
anda boleh menaip / bin / di mana dan anda akan mendapatkannya.
Jika anda tidak mahu untuk menaip keseluruhan pathname, anda boleh menentukan alias.
Malah, jika anda memberikan alias nama yang sama seperti arahan terbina dalam, ia akan bekerja
kerana definisi alias dinilai
sebelum shell menentukan bahawa itu arahan terbina dalam yang perlu dilaksanakan.
Maka ini mendapat sedikit lebih rumit dengan beberapa arahan di sini.
Kes beberapa arahan sebenarnya arahan dalaman dan di jalan.
Salah seorang daripada mereka adalah gema, arahan yang hanya menggunakan sedikit masa lalu di contoh-contoh.
Echo adalah arahan di jalan dan ia dalam setiap shell.
Mereka tidak semestinya semua berkelakuan dengan cara yang sama.
Ia pada asalnya arahan sahaja di jalan.
Ia dibina pada kepada cengkerang kemudian.
Oleh kerana terdapat pilihan yang bergantung kepada alam sekitar
dan pilihan baris arahan, arahan terbina dalam
ditulis untuk berfungsi yang sama seperti arahan yang telah berada di jalan yang benar,
ia tidak mungkin mereka akan telah ditulis dengan cara yang
jika perintah itu tidak pun ditulis untuk jalan.
Jadi ini mempunyai kesan sampingan. Sejarahnya mempunyai kesan di sini.
Terdapat pilihan yang ada.
Terdapat juga satu pilihan yang ditakrifkan oleh pembolehubah dalam tcsh yang dipanggil echo_style.
Itulah salah satu pembolehubah yang boleh mengubah cara yang echo kerja-kerja.
Terdapat kes-kes lain di mana anda boleh menetapkan pembolehubah
yang mengubah cara bahawa operasi shell, termasuk arahan terbina dalam, kerja-kerja.
Ia tidak akan menjejaskan apa-apa lagi
sejak arahan lain tidak mempunyai akses kepada pembolehubah shell,
hanya pembolehubah persekitaran.
Tetapi operasi shell boleh membaca pembolehubah shell.
Itu tidak akan bekerja untuk csh. Itu hanya tcsh. Itulah salah satu tambahan-tambahannya.
Parsing mempunyai urutan apabila ia menilai metacharacters,
apabila ia menilai pembolehubah, alias, rujukan sejarah.
Ada aturan tertentu untuk projek ini.
Jika ia perkara dalam urutan tertentu
dan mendapat kepada sesuatu yang merupakan ungkapan yang amat
yang telah dinilai, ia tidak akan menilainya semula.
Jika ia mendapatnya, maka ia hanya akan menyampaikan watak-watak.
Jadi, jika penilaian beberapa ungkapan seperti penggantian arahan
atau boleh ubah atau apa sahaja yang menimbulkan ungkapan
yang anda mahu dinilai,
yang akan bekerja hanya jika penilaian yang berlaku kemudian dalam urutan itu.
Saya berharap saya menjadi jelas di sana.
Urutan parsing, satu operasi di C-shell,
tidak sama untuk arahan dalaman kerana ia adalah untuk bukan arahan dalaman.
Saya tidak pasti mengenai Bash sana.
Sebagai contoh, jika pembolehubah shell menghasilkan rujukan sejarah,
ia mungkin tidak akan kembali dalam sejarah.
Ia hanya akan mendapat tanda seru.
Malah, kita boleh mencuba yang keluar sekarang.
menetapkan = dan kami akan mempunyai untuk meletakkan ini di sana.
Oh, tunggu. Maaf. Saya melakukan ini dalam Bash. Yang saya mahu lakukan di sini.
Lihat, jadi ia tidak menilai bahawa rujukan sejarah
kerana ia sudah melalui titik menilai ungkapan sejarah
apabila ia dinilai pembolehubah.
Jadi, itu 1 kesan parsing.
Dan sekali lagi, arahan dalaman tidak dilakukan dengan cara yang sama.
Baiklah. Mari kita pergi kepada yang seterusnya di sini.
Ini adalah bertujuan untuk menjadi 1 line, tetapi ia menjadikannya lebih mudah untuk dibaca.
Apakah yang lakukan?
Anda masih ingat bahawa kita boleh menilai tanda bintang sebagai wildcard nama fail,
dan ada wildcard nama fail lain seperti tanda tanya dan ungkapan kurungan.
Itu jenis penilaian dipanggil globbing.
ditetapkan noglob pada awal perintah ini mengatakan tidak melakukannya.
noglob belum berikat berkata kembali untuk melakukan itu.
Perhatikan bahawa set kelompok tidak akan mempunyai kesan yang.
Dalam bahasa biasa, tetapkan kelompok atau noglob belum berikat akan kelihatan setara,
tetapi di sini ia tidak. Ia noglob belum berikat.
Sekarang tset. tset berdiri set terminal.
Ia tidak digunakan yang sering sekarang, tetapi sebelum sistem windowing menjadi tersedia
dan anda mempunyai terminal tunggal, anda mungkin perlu menentukan jenis.
Dan jika ada sesuatu yang akan datang ke atas Ethernet atau daripada rangkaian,
anda mungkin mahu untuk mengatakan ia vt100 a.
VT100 adalah jenis standard dalam perniagaan terminal. Ia datang dari terminal Disember ini.
Jika anda hanya melakukan dialup - melihat bahawa? Ini kembali cara, kan?
Jadi, jika kita hanya tset di sini,
jika saya hanya melakukan tset, ia menetapkan semula terminal saya, tetapi anda tidak melihat apa-apa.
Ia tidak benar-benar mengubah apa-apa.
-S
Okay.
JANGKA setenv xterm-warna.
Kita sudah tahu bahawa istilah itu ditetapkan dengan cara itu, supaya tidak berubah.
Itulah cara kita akan mahu melakukannya.
Tetapi notis bahawa perintah, tset-s, output hanya ini arahan ini. Ia tidak menjalankannya.
Ia tidak menjalankan perintah ini, yang mengeluarkannya.
Jadi ini adalah bertujuan untuk menghasilkan arahan yang kemudiannya akan dijalankan.
Anda ingat arahan dalam fail yang saya hanya menunjukkan anda mempunyai Q di dalamnya.
Jadi mari kita buat itu.
Q menyekat beberapa output, tetapi itu tidak kira di sini, seperti yang anda lihat.
Saya hanya melakukan yang menunjukkan bahawa ia tidak perkara itu.
Ini adalah backquote sintaksis.
Nota backquote di sini, backquote sini.
Saya meninggalkan perkara-perkara ini di sini.
Ini adalah kes memberitahu ia apa yang perlu dilakukan
dalam kes jenis tertentu terminal -
Ethernet, rangkaian, dialup, golongan berada.
Tidak kira di sini kerana kita tidak benar-benar melakukan apa-apa perkara-perkara ini.
Saya hanya menggambarkan arahan.
Jika saya melakukan ini dengan backquote yang, apa yang saya akan dapat?
Juga notis di sini bahawa ini termasuk noglob set dan noglob yang tanpa ditetapkan,
Maka orang-orang kini diperlukan dalam takrif.
Yang tidak selalunya benar, tetapi sekarang mereka termasuk dalam arahan ini.
Tetapi mari kita lihat apa yang berlaku jika saya berbuat demikian
dan pergi ke permulaan baris dengan Kawalan A dan saya berbuat demikian.
Okay, ditetapkan: Arahan tidak dijumpai. Itu jenis ganjil, bukan?
set adalah arahan yang terkenal. Ia adalah sebahagian daripada cengkerang.
ditetapkan: Arahan tidak dijumpai? Mengapa?
Hmm. Nah, mari kita berfikir tentang perkara ini.
Ia menjalankan penggantian arahan backquote,
dan yang berlaku pada bahagian tertentu urutan menghuraikan arahan.
set adalah arahan terbina dalam.
Jadi dengan masa yang dilakukan yang penggantian perintah,
ia sudah mendapat melalui titik mengenal pasti arahan dalaman.
Jadi ia merawat ditetapkan sebagai olah ia suatu perintah di jalan.
Tidak perlu dikatakan, ia tidak merasa dan anda mendapat ralat.
Juga. Ada satu contoh urutan parsing.
Dan apa yang kita lakukan itu?
Notis arahan ini sangat menarik di sini, eval.
Saya tertanya-tanya apa yang tidak.
Jika anda melihat manual - dan mari kita hanya berbuat demikian
untuk menunjukkan bagaimana mengelirukan panduan tersebut adalah -
tcsh lelaki, manual keliru, mencari perkara di sini tidak mudah sama ada.
Di sini kita pergi, eval Arg, supaya kita boleh mempunyai 1 atau lebih hujah-hujah
dan ada senarai benda yang ada.
Merawat hujah-hujah sebagai input kepada shell
dan melaksanakan perintah-perintah yang menyebabkan konteks shell semasa.
Ini biasanya digunakan untuk melaksanakan arahan yang dihasilkan sebagai hasil daripada arahan
atau penggantian pembolehubah kerana parsing berlaku sebelum penggantian ini.
Sangat baik.
Dan di sini mereka juga merujuk kepada arahan tset bagi penggunaan sampel
seperti yang saya hanya menunjukkan anda.
Sekarang saya perlu mendapatkan tingkap belakang ke tempat yang berguna.
Mari kita di sini dan kita akan melihat eval yang digunakan sebelum itu.
Jadi mari kita lihat apa yang berlaku jika kita meletakkan - di sini kita pergi dengan anak panah untuk arahan yang
dan Kawalan A ke permulaan, eval.
Okay, jadi ia berfungsi.
Apabila anda melakukan eval, ia mengambil apa yang datang selepas itu dan menjadikannya perintah.
Ini membolehkan anda untuk dasarnya menghurai dua kali.
Seksyen di sini berjalan arahan ini di dalam backquotes,
mendapat output.
Output sepatutnya dijalankan seperti yang arahan di sini seperti ini
pada satu ini dan yang satu ini.
Maka orang-orang arahan kini di sini di urutan ini,
tetapi ini arahan dalaman dan ia tidak boleh mendapatkan mereka dengan segera.
Jadi kita pergi ke eval, eval picks bahawa sehingga, bermula segala-galanya sekali lagi, dan ia berfungsi.
Contoh kedua-backquoting, eval, parsing, akibat parsing,
dan arahan yang mungkin penggunaan yang sangat sedikit kepada anda pada masa kini.
Okay. Baiklah, umask.
Mari kita lihat arahan ini di sini, umask 022. Saya tertanya-tanya apa yang tidak.
Mari kita menaip umask dengan apa-apa selepas itu. 22. Okay.
022 dan melakukannya sekali lagi.
Seperti yang anda mungkin telah meneka, umask tanpa hujah memberitahu anda topeng semasa;
umask dengan hujah-hujah yang menjadikannya itu, tetapi itu yang saya sudah mempunyai.
Apakah 022 bermakna?
Ini adalah di sini perlindungan untuk fail.
Mereka menentukan yang dibenarkan untuk membaca atau menulis atau melaksanakan fail.
Perlindungan juga dikenali sebagai kebenaran.
R bermaksud membaca, w untuk menulis,
dan x, yang tidak hadir di sana, bermaksud melaksanakan.
Terdapat 3 kategori di sana.
3 elemen terakhir adalah dalam kategori pengguna. Mereka memohon kepada saya, pengguna.
Ini 3 di sini memohon kepada kumpulan.
Fail itu adalah milik 1 kumpulan, pengguna boleh dimiliki beberapa kumpulan,
tetapi jika pengguna adalah dalam kumpulan yang fail ini merdeka,
maka perlindungan ini akan terpakai baginya jika dia tidak pengguna.
Dan yang ini adalah orang lain.
Kategori-kategori ini adalah saling eksklusif.
Perlindungan pengguna terpakai baginya,
perlindungan kumpulan terpakai bagi anggota kumpulan yang lain daripada pengguna,
dan perlindungan yang lain hanya terpakai kepada orang-orang selain daripada pengguna dan ahli-ahli kumpulan.
Jika ada r atau aw atau x, ia bermakna bahawa perlindungan diberikan.
Jika ada tanda penghubung, ia bermakna ia tidak.
Terdapat sebenarnya adalah perkara-perkara lain yang boleh diletakkan di sini selain dari,
yang saya tidak akan masuk ke dalam sekarang.
Umask Polis mentakrifkan lalai untuk fail yang anda buat.
Dan sebagai topeng, pada dasarnya ia berkata bit bahawa anda tidak ditetapkan.
Bagaimana ini menjadi bit?
Jika anda memikirkan setiap sebagai nombor perlapanan,
ini adalah sedikit 1s, ini adalah 2s, ini adalah 4s.
Jadi 0 melalui 7
akan menerangkan apa gabungan r ini, w, dan x ini anda ada untuk ini 3
dan kemudian nombor yang sama untuk ini dan kemudian untuk ini.
Jadi 022 bermakna 0 untuk yang lain, 2 bagi kumpulan, 2 untuk pengguna.
Tetapi ini adalah topeng. Topeng itu adalah apa yang anda tidak mempunyai.
Saya minta maaf. Saya hanya memberikan anda perkara-perkara dalam perintah itu salah.
Ia yang pertama 3. Ini 3 adalah pengguna, ini 3 adalah kumpulan, ini 3 adalah lain.
Maaf saya berikan anda ini dalam perintah itu salah.
0, yang merupakan pertama daripada mereka, tidak memaparkan nilai,
tetapi jika satu nombor tidak ada, ia adalah 0.
Ini bermakna semua 3 daripada dibenarkan.
Perhatikan bahawa dalam satu tertentu x adalah tidak dibenarkan.
Sebabnya ialah shell mampu menentukan
sama ada fail yang perlu dilaksanakan atau tidak.
Oleh kerana ini bukan fail boleh laku, ia tidak menetapkan x.
2 cara yang menulis kebenaran, kategori yang kedua di sini,
yang di tengah, ditolak.
Jadi sekali lagi, ini adalah perkara-perkara yang ia dinafikan.
Nah, x dibenarkan tetapi ia bukan di sini kerana ia bukan boleh laku
dan begitu juga bagi orang lain.
Jadi itu adalah satu umask biasa.
Satu lagi yang biasa ialah 700 - memberi diri anda segala-galanya dan tidak ada orang lain apa-apa.
Dan ada kemungkinan lain.
Saya akan kembali ke itu. Menggunakan sejarah yang saya boleh mencari kembali untuk itu, LWH ke sana.
Okay. Jadi di sini, ini adalah kerang.
Bash, pemilik yang akaun sistem, boleh melakukan segala-galanya.
Kumpulan dan semua orang boleh membacanya atau melaksanakan tetapi tidak menulis.
Yang ini juga tidak membenarkan pemilik untuk menulis kepadanya.
Jika pemilik mahu menulis kepadanya, akaun sistem,
beliau akan mempunyai untuk menukar perlindungan pertama.
Tetapi sekali lagi, umask menetapkan lalai dengan pelekat itu,
dengan menunjukkan bit yang tidak akan ditetapkan.
Ini biasanya dalam salah satu fail pemula anda, yang merupakan. Cshrc untuk C-shell
atau. profil bagi kerang Bourne-jenis.
Ia boleh berada di tempat lain juga jika terdapat fail pemula lain pada sistem.
Bagaimanapun, itu umask.
Ada jenis sesuatu yang ganjil di sini,
dan itu adalah, mengapa ada arahan tunggal untuk ini?
Jika saya menulis ini, saya akan membuat ia satu pemboleh ubah, umask = beberapa nilai.
Kenapa ada arahan keseluruhan hanya untuk tujuan ini?
Sebabnya ialah ini hanya kembali kepada asal-usul Unix.
Unix adalah hanya beberapa projek pengaturcaraan di Bell Labs pada awal tahun 1970.
Orang hanya mendapat bersama-sama untuk program.
Mereka tidak pernah dimaksudkan untuk menjadi satu sistem operasi di seluruh dunia.
Orang yang berlainan menulis bahagian yang berlainan tanpa berfikir banyak
bagaimana mereka akan digunakan - bukan lengkap.
Dan ia datang bersama-sama seperti itu, dan ia masih seperti itu dalam beberapa hal.
Jadi yang mencerminkan sejarah, dan masih ada ini tidak konsisten dan unsur-unsur ganjil itu.
Okay. Satu seterusnya di sini.
Seperti yang saya tulis sebelum ini, C-shell tidak benar-benar digunakan sangat banyak untuk pengaturcaraan,
walaupun ia boleh.
Ia melaksanakan lebih perlahan, sekali lagi pertentangan di antara penggunaan interaktif,
yang mempunyai lebih pemprosesan yang terlibat daripada kelajuan,
yang boleh melakukan tanpa pemprosesan.
Ciri-ciri tambahan ditambah kepada shell Bourne oleh Korn dan Bourne-lagi cengkerang
seolah-olah tidak melambatkan mereka, dan saya tidak tahu mengapa yang.
Ia mungkin pengaturcaraan yang lebih baik, tetapi saya tidak dalam kedudukan untuk tahu.
Mempercepatkan sini sebenarnya tidak seperti masalah besar, walaupun ia disebut.
Sebabnya ialah skrip shell sebenarnya mendapat agak cepat.
Jika terdapat banyak perintah seperti dalam program calculational,
anda mungkin tidak akan melakukannya dalam skrip shell.
Operasi di sana adalah agak mudah dan mudah.
Orang-orang yang aku alami yang terlalu perlahan
melibatkan aplikasi berulang arahan perlahan.
Terdahulu saya sebutkan editor aliran sed. Perintah yang tersebut ialah perlahan.
Jika anda melaksanakan banyak kali sed, anda akan mendapat skrip yang perlahan, tetapi ia bukan shell itulah perlahan.
Berjalan ia di Bourne shell tidak akan banyak lebih cepat daripada berjalan dalam C-shell,
walaupun ada mungkin beberapa kelebihan di sana.
Keupayaan pengaturcaraan tambahan, di sisi lain,
sebab-sebab penting mengapa anda akan menggunakan kerang Bourne-jenis.
C-shell mempunyai ciri-ciri ganjil kepadanya -
hakikat bahawa anda tidak tahu jika pembolehubah adalah pembolehubah shell atau pembolehubah persekitaran.
Ia boleh menjadi sangat mengelirukan.
Ia tidak begitu mudah untuk menulis
hanya berdasarkan kepada pengalaman anda pengaturcaraan dalam bahasa lain.
Saya fikir anda mungkin mendapati kerang Bourne-jenis yang lebih konsisten dengan pengalaman anda.
Skript, walaupun, boleh beribu-ribu garis-garis panjang.
Mereka yang saya lihat adalah digunakan untuk menampal sistem operasi.
Mereka boleh melaksanakan dengan perlahan-lahan, tetapi anda tidak lari mereka sangat kerap.
Ia hanya apabila anda lakukan penampalan,
dan ia hanya pengurus sistem yang melakukan perkara-perkara,
jadi ia tidak benar-benar banyak isu.
Mereka yang beratus-ratus barisan panjang sebenarnya melaksanakan agak cepat.
Menyebut ini di sini, apa yang adalah mereka penambahbaikan?
Saya telah disebutkan sebahagian kecil dari mereka - tatasusunan, pengiraan,
yang () ungkapan untuk pengiraan dalam Bash shell, $
jenis lain penggantian arahan.
Terdapat pelbagai jenis arahan ujian
di mana anda boleh melakukan ujian bersyarat kepada kewujudan fail atau perkara-perkara lain.
Terakhir di sini, arahan ini di sini.
Apakah ini lakukan, dan mengapa orang akan menggunakannya?
variablename printenv.
Kita tahu apa yang printenv tidak. Ia memberitahu kita nilai pembolehubah.
Dan variablename printenv tidak akan memberitahu kita sangat banyak kerana tidak ada pembolehubah tersebut.
Kosong.
Tetapi mari kita memberikan sesuatu yang bermakna.
Itu bukan sana sama ada. Okay. Saya rasa saya tidak pernah ditakrifkan itu.
Mari kita lihat persekitaran saya.
Ini merupakan satu lagi arahan mana anda boleh memeriksa persekitaran anda.
Terdapat EDITOR tua yang baik, yang kita lihat sebelum ini.
Apakah yang lakukan?
Di sini kita mempunyai ungkapan backquote.
Ingat ini adalah C-shell.
Jadi EDITOR printenv akan memberikan kita nilai EDITOR. Ia vi.
Dan kemudian ia akan menetapkan nilai tersebut kepada pembolehubah, arahan yang ditetapkan.
Jadi sekarang jika saya lakukan echo $ a, saya mendapat vi.
Yang tidak kelihatan sangat berguna.
Walau bagaimanapun, ia sebenarnya tidak mempunyai tujuan.
Oleh kerana kita tidak tahu sama ada pembolehubah adalah pembolehubah shell atau pembolehubah persekitaran
dengan menggunakan tanda dollar penilaian sintaks, kita boleh menggunakan printenv
memastikan bahawa ia adalah satu pembolehubah persekitaran.
Jadi, jika terdapat shell editor berubah-ubah, ini tidak akan mendapat ia.
Ini hanya dengan pembolehubah alam sekitar.
Jika terdapat pembolehubah shell dan saya mahu nilai,
Saya perlu mencari cara lain untuk melakukannya.
Salah satu cara untuk berbuat demikian akan menjadi dengan melakukan set dan paip.
Ini adalah salah satu metacharacters, watak-watak khas.
Ia menghantar output bersedia untuk sesuatu yang lain.
Mari kita lihat apa yang kita dapati di sana.
Tiada apa-apa. Okay. Mari kita melihat apa yang di sana semua bersama-sama.
Ia adalah echo_style, yang saya nyatakan sebelum ini. Baiklah, mari kita buat itu.
Ingat saya nyatakan sebelum ini, echo_style
menentukan cara arahan echo akan berjalan.
BSD bermaksud Pengagihan Berkeley Standard.
Ini adalah Berkeley Unix dari tahun 1970-an.
Itulah salah satu cara yang echo boleh berjalan.
Menetapkan echo_style kepada nilai yang di TC-shell akan menyebabkan gema berkelakuan dengan cara itu.
Jadi tidak ditetapkan itu, tetapi menetapkan hanya mendapat pembolehubah shell.
Ia tidak akan mencari EDITOR, yang tidak berubah-ubah shell.
Tiada apa-apa.
Jadi, itu salah satu cara untuk membezakan mereka.
Tetapi hakikat bahawa anda perlu melalui beberapa arahan pelik seperti itu
untuk membezakan antara pembolehubah shell atau pembolehubah persekitaran
menunjukkan jenis sifat praktikal C-shell untuk tujuan-tujuan.
Dan sekarang, lepas dan mungkin kurangnya, ini adalah halaman manusia.
Orang-orang yang anda tahu, lelaki itu adalah pendek arahan untuk manual.
Halaman lelaki untuk cengkerang adalah sukar untuk dibaca. Mereka sangat panjang.
Mereka yang dianjurkan dengan cara yang boleh membuat ia sukar untuk mencari apa yang anda cari.
Jadi, jika anda mencari sesuatu dengan maksud,
anda mungkin tidak tahu jika maksud itu adalah pembolehubah shell atau sesuatu yang lain,
jadi anda mungkin tidak tahu di mana untuk mencari ia.
Anda boleh mencari pelbagai tali, tetapi tali sering berulang.
Jadi ia biasanya sukar untuk dibaca.
Kami hanya melihat halaman TC-shell seorang lelaki sedikit sebelum untuk mencari arahan eval itu.
Beberapa perkara yang lebih pantas.
Satu pendekatan adalah untuk mencari rentetan.
Anda boleh menggunakan alat kelui itu.
Pager mempunyai palang untuk mencari arahan atau rentetan di dalam operasi alat kelui.
Man secara lalai akan menggunakan alat kelui, sama ada lebih atau kurang.
Saya tidak tahu jika anda biasa dengan mereka, tetapi mereka boleh menunjukkan fail sedikit demi sedikit.
Saya telah menggunakan KURANG untuk memaparkan fail-fail tertentu yang kami ada di sini.
Anda boleh mencari di dalam sana.
Anda boleh cuba menggunakan tali carian yang berbeza.
Juga laman lelaki dalam sistem operasi yang berbeza mungkin sama.
Mereka boleh menjadi laman yang berasingan untuk csh dan tcsh.
Mereka tidak berada di Mac, tetapi mereka mungkin jika mereka adalah arahan yang berasingan.
Jika sh tidak benar-benar memanggil Bash, terdapat mungkin akan menjadi halaman lelaki yang berasingan.
Sesetengah sistem mempunyai halaman lelaki berasingan hanya untuk C-shell arahan dalaman.
Kadang-kadang jika anda mahu membaca perihal arahan terbina dalam
yang juga dalam jalan yang benar, seperti gema, anda perlu membaca halaman lelaki itu pada bahawa perintah di echo
untuk menentukan bagaimana ia akan bekerja sebagai arahan terbina dalam
walaupun anda tidak memanggil arahan terbina dalam.
Itu merupakan kelemahan sistem operasi secara umum, bukan sahaja untuk cengkerang,
walaupun untuk cengkerang khususnya halaman lelaki agak panjang,
sebahagiannya kerana mereka telah menambah ciri-ciri berguna kepada mereka, yang boleh menjadi positif.
Okay. Adakah terdapat apa-apa soalan? Mana-mana topik yang anda mahu untuk membawa?
Apa-apa yang berkaitan di sini?
Nah, ia telah sangat bagus bercakap dengan anda semua.
Saya harap anda mendapat sesuatu daripada seminar ini
yang akan berguna untuk anda dalam usaha masa depan anda.
[CS50.TV]