>> [Seminar - Shells Unix, Lingkungan]
[Douglas Kline - Harvard University]
[Ini adalah CS50. - CS50.TV]
>> Topik hari ini adalah shell Unix.
Aku Douglas Kline, ahli, atau setidaknya cukup pengguna yang kompeten, dari shell.
Sebuah shell adalah antarmuka bagi pengguna untuk sistem operasi komputer.
Nama ini menyesatkan karena, tidak seperti shell hewan,
yang keras dan pelindung, shell komputer memungkinkan untuk komunikasi.
Jadi membran berpori mungkin akan menjadi metafora yang lebih baik.
>> Shell asli untuk Unix adalah shell Bourne.
Bourne dieja B-O-U-R-N-E.
Bourne adalah salah satu penulis asli dari Unix,
dan sebagainya shell dinamai menurut namanya.
Nama yang shell sebagai perintah hanya cukup sh.
Itulah perintah yang dapat mengeksekusi.
Shell dimulai saat login.
Ketika Anda login ke komputer, shell hanya mulai berjalan untuk Anda,
dan itulah yang mengambil perintah Anda.
Hal ini dapat dimulai pada waktu lain juga.
Jika Anda membuka jendela dengan tidak ada indikasi lain, akan memulai shell untuk Anda.
Begitulah adalah bahwa Anda dapat pergi ke jendela dan mulai mengetik perintah
dan sebagainya di sana meskipun Anda tidak masuk ke jendela itu.
Selain itu, jika Anda melakukan remote login,
maka akan memulai shell pada komputer remote.
Dan itu mungkin untuk menjalankan perintah tanpa shell interaktif.
Itu bisa berarti dalam operasi Anda saat ini,
dan juga dapat berarti operasi remote.
Anda bisa mengirim perintah ke komputer lain,
yang meliputi memulai shell di sana.
Bahkan, ia harus menyertakan memulai shell ada
bahkan jika itu tidak tujuan akhir Anda.
Ketika sesuatu dijalankan seperti ini, itu tidak selalu memulai shell baru.
Jika Anda membuka jendela baru, mungkin untuk menceritakannya untuk membuka editor
atau beberapa perintah lain.
Dalam hal ini, editor akan mulai dari awal.
Ketika editor berakhir, jendela berakhir.
Ini sedikit tidak biasa tetapi bisa dilakukan.
Dalam kasus tersebut, itu tidak akan menjadi shell.
Jadi hal itu belum tentu terjadi bahwa jendela atau aplikasi tersebut akan memunculkan shell.
>> Shell mem-parsing perintah.
Parsing berarti mengidentifikasi berbagai elemen dan mengklasifikasikan mereka.
Dalam perintah, string lengkap yang Anda ketik,
akan ada 1 atau lebih perintah tunggal yang akan dieksekusi.
Unsur-unsur lain dapat argumen.
Ada juga bisa menjadi karakter khusus yang mempengaruhi pelaksanaan perintah.
Mereka dapat mengirim output di tempat lain selain layar
jika perintah biasanya akan mengirimkannya ke layar.
Hal ini dapat mengarahkan input, yang dapat melakukan hal-hal lain juga.
Ada berbagai simbol lainnya, karakter, dan sebagainya.
Parsing melibatkan mendeteksi dan menafsirkan hal-hal.
>> Sekarang jika tidak ada lagi pertanyaan, yang agak mungkin karena tidak ada lebih banyak orang,
kita akan pergi ke halaman berikutnya saya di sini.
>> Saya katakan sebelumnya bahwa Bourne shell adalah shell awal.
Ada orang lain.
Salah satunya adalah C-shell. Perintah adalah csh.
Nama C-shell hanya permainan kata-kata.
Shell ini diperkenalkan dengan Berkeley Unix di pertengahan 1970-an.
Berkeley Unix adalah peristiwa mani dalam pengembangan Unix.
Ini adalah sebuah revolusi besar dan termasuk pengenalan shell ini.
Alasan untuk itu permainan kata, C-shell,
adalah bahwa C-shell memiliki beberapa karakteristik di dalamnya yang menyerupai bahasa C,
yang Bourne shell tidak memiliki -
atau tidak memiliki pada saat itu.
Ada juga TC-shell.
Ini adalah superset dari C-shell.
Ini memiliki fitur tambahan, banyak yang berguna untuk penggunaan interaktif,
seperti mengingat perintah dalam mekanisme sejarah,
yang saya akan menjelaskan sedikit kemudian -
dengan cara yang sederhana, model setelah editor.
Ini juga memiliki binding yang memungkinkan Anda untuk mengikat string kunci pendek untuk perintah lagi.
Kami tidak akan masuk ke hari ini.
Ini memiliki beberapa fitur yang berguna untuk pemrograman.
Namun, C-shell tidak sering digunakan untuk pemrograman shell.
Program Shell, jika Anda tidak sudah tahu,
adalah program yang terdiri dari karakteristik shell.
Anda bisa menjalankan ini sebagai program.
Anda menulis sekelompok perintah shell ke dalam sebuah file dan menjalankan file tersebut.
Anda tidak perlu melakukan kompilasi. Ini adalah bahasa interpretatif.
Ungkapan C-shell sekarang ambigu karena mungkin hanya mengacu pada asli C-shell, csh,
atau untuk semua C-kerang, termasuk tcsh. Ini sedikit ambigu.
>> Sebuah shell kemudian adalah Korn shell, ksh, dinamai programmer, Korn.
Shell ini mencoba untuk memasukkan ke dalam 1 shell
keuntungan dari C-shell untuk penggunaan interaktif
dan Bourne shell untuk pemrograman.
Telah digunakan sebagai shell interaktif oleh beberapa orang - minoritas.
Kemudian meskipun, ada pengantar lain, shell Bash, BASH,
lagi permainan kata, Bourne-lagi shell.
Ini adalah perpanjangan dari shell Bourne. Korn shell juga. Keduanya.
Ini memiliki tujuan yang sama dari Korn shell amalgamating C-shell
dan keuntungan Bourne shell dalam 1 shell.
Banyak perangkat tambahan dari shell Korn juga termasuk dalam Bash.
Bash, bagaimanapun, memiliki lebih dan karena itu lebih baik.
The Bourne-lagi shell dan shell Korn disebut Bourne-jenis kerang
karena mereka termasuk karakteristik Bourne shell,
yang tidak kompatibel dalam beberapa hal dengan C-kerang.
Ada kerang lain selain mereka, sebagian ditujukan untuk penggunaan terbatas,
mungkin terbatas pada beberapa perintah, mungkin tujuan khusus, tidak sering digunakan.
>> Oke. Item berikutnya di sini.
The Bash shell telah menjadi terkait dengan berbagai bentuk Linux.
Saya tidak yakin apakah itu benar dari setiap bentuk.
Ada banyak bentuk di luar sana dan saya belum pernah menggunakan mereka semua,
tetapi pada mereka bahwa saya telah digunakan itu telah menjadi terkait dengan itu.
Sejauh yang saya tahu, tidak ada tentang Bash
yang membuatnya lebih kompatibel dengan Linux
daripada kombinasi lain dari shell dan sistem operasi.
Saya pikir ini mungkin hanya mencerminkan kecenderungan dari para programer.
Itu memiliki menjadi terkait dengan Linux adalah alasan lain untuk memilih Bash ksh
karena hal-hal yang mungkin tertulis di dalamnya dan itu mungkin menyebar.
Saya akan memberikan alasan lain untuk itu nanti.
Skrip Bourne shell harus berjalan di bawah shell Korn atau Bash.
Jika Anda menulis sesuatu untuk shell Bourne,
Anda mungkin dapat mengeksekusi bawah ksh atau bash.
Korn shell script mungkin akan berjalan di bawah Bash, tapi aku tidak bisa menjamin bahwa.
Kemudian di sini, skrip C-shell harus berjalan di bawah TC-shell.
The C-shell sebenarnya pernah banyak digunakan untuk scripting
sejak Bourne shell dan kemudian kerang Bourne-type yang lebih baik untuk tujuan itu.
Jadi yang benar-benar tidak semua yang penting.
Ada cukup banyak Bourne shell script yang ditulis lama,
sebelum shell Korn atau Bourne-lagi shell diperkenalkan.
Mereka masih digunakan, bagian dari sistem operasi,
dan Anda akan menemukan mereka jika Anda melihat ke dalam sistem operasi
atau beberapa paket program lama.
>> Bash sampai batas tertentu menjadi lingua franca semacam untuk sistem operasi.
Ini sudah diperpanjang ke Windows dan VMS.
VMS, dalam kasus Anda tidak tahu, adalah sistem operasi proprietary
dari Digital Equipment Corporation yang masih digunakan, sebagian besar di belakang layar.
Dan jika itu akan berjalan pada beberapa sistem operasi yang berbeda,
kemungkinan orang cenderung bergeser untuk itu.
Tapi pembangunan ini relatif baru.
Ini baru saja dimulai, jadi saya tidak bisa memprediksi apakah ini akan benar-benar berubah menjadi semacam lingua franca.
Juga, karena nama path berkas dan perpustakaan berbeda
antara sistem operasi yang berbeda,
Anda mungkin tidak dapat menulis naskah Bash pada satu sistem operasi
dan kemudian menjalankannya pada satu sama lain.
Anda harus dapat bergerak di antara Unix yang berbeda, Linux
Sistem operasi Mac OS tetapi belum tentu untuk Windows atau VMS.
Anda mungkin harus mengubah deskripsi berkas pathname,
dan beberapa perpustakaan mungkin berbeda,
yang dapat mempengaruhi cara bahwa beberapa perintah bekerja
atau bagaimana mereka memproses argumen dan sejenisnya.
Selain itu, hati-hati lain di sini adalah bahwa tidak ada jaminan
bahwa semua kerang yang berbeda yang telah saya sebutkan - Bourne shell, C-shell,
TC-shell, Korn shell, Bourne shell-lagi - akan tersedia di bawah setiap Unix
atau Linux atau komputer Mac OS.
Mereka hanya mungkin tidak berada di sana.
Itulah salah satu peringatan di sini.
Ini adalah pembatasan disayangkan di sini karena Anda ingin sesuatu untuk bekerja di mana-mana,
tapi sayangnya, Anda tidak dapat bergantung pada itu.
>> Oke. Berikutnya satu di sini.
Katakanlah bahwa Anda ingin menulis sebuah shell script,
sebuah program yang terdiri dari perintah shell.
Anda menulis perintah Anda, menempatkan mereka dalam sebuah file, dan menjalankan file tersebut.
Bagaimana jika Anda ingin menyertakan argumen?
Dalam kasus operasi shell, argumen disebut parameter atau parameter posisi
dan mereka akan dipanggil oleh tanda dolar dan angka, $ 1, $ 2.
Jadi jika script memiliki nama ini, argumen pertama saya mungkin argumen 1
dan kedua saya mungkin argumen 2,
dan di dalam naskah saya jika saya ingin merujuk pada hal-hal ini -
mari kita menghapus ini karena aku tidak benar-benar akan menjalankannya -
dalam naskah saya, saya mungkin memiliki $ 1 untuk merujuk Arg1,
$ 2, yang akan keluar seperti itu, arg2.
Jadi simbol-simbol yang tersedia untuk merujuk pada argumen,
dan mereka berlaku untuk semua kerang.
Selain itu, ada karakter lain.
$ * Mengacu pada seluruh daftar argumen, semua dari mereka.
$ # Mengacu pada jumlah argumen.
Sekali lagi, ini berlaku untuk semua kerang.
Simbol-simbol, * dan #, dapat digunakan dengan arti mereka di tempat-tempat lain juga.
Kami tidak akan masuk ke itu.
>> Shell garis specifier. Apa itu?
Katakanlah Anda sudah menulis naskah dan itu untuk shell tertentu dan Anda ingin menjalankannya.
Bagaimana Anda tahu apa shell sistem operasi Anda akan digunakan untuk menjalankan script Anda?
Pada satu titik Anda bisa berasumsi bahwa itu akan berjalan dalam shell Bourne
jika Anda tidak mengatakan sebaliknya,
tetapi orang tidak menulis skrip di Bourne shell yang banyak lagi
dan Anda bahkan tidak bisa mengandalkan itu lagi.
Jadi di sini kita memiliki garis specifier shell di sini.
Yang menentukan Bash.
Perhatikan bahwa menentukan dalam pathname, / bin / bash.
Jika komputer memiliki shell Bash tapi tidak di direktori bin, / bin, ini tidak akan bekerja.
Itu kualifikasi lain, hati-hati lain di sini.
Tanda pound adalah karakter baris komentar.
Itu berlaku untuk semua kerang.
Kasus tertentu di sini, #! pada awal naskah, adalah kasus khusus.
Yang menentukan shell di mana untuk menjalankan script.
Seperti saya katakan, tidak mungkin sama tempat / bin.
Selain itu, ada hal lain di sini.
Jika Anda hanya menggunakan tanda pound tanpa tanda seru dan pathname,
yang harus menunjukkan C-shell.
Namun, saya tidak menyarankan melakukan hal itu karena aku tidak bisa menjamin
bahwa akan selalu bekerja.
Jika Anda ingin C-shell, akan lebih baik untuk mengatakan begitu.
Lalu ada sesuatu yang agak membingungkan di sini.
Jika Anda menggunakan baris specifier shell seperti / bin / bash
dan shell yang tidak tersedia di sana,
tidak ada hal seperti / bin / bash pada komputer tertentu,
baik karena tidak memiliki Bash atau karena itu di lokasi yang berbeda,
Anda akan mendapatkan error yang mengatakan bahwa script Anda berlari tidak ada.
Dan tentu saja naskah Anda ada, sehingga pesan kesalahan membingungkan.
Alasan bahwa sistem operasi memberi Anda kesalahan yang
atau, lebih tepatnya, bahwa shell interaktif Anda di mana Anda menjalankan ini memberikan kesalahan itu,
adalah bahwa laporan perintah yang Anda gunakan, yang merupakan nama dari script.
Perintah tersebut secara efektif disebut shell dengan nama script.
Di situlah Anda mendapatkan pesan kesalahan membingungkan.
Cara lain untuk memanggil shell script
adalah dengan menentukan shell pada baris perintah, seperti di sini.
Ini adalah perintah. Ini mengatakan menjalankan Bash dan kemudian jalankan script saya di Bash.
Itu akan lebih diutamakan daripada garis specifier,
dan ini memiliki fitur yang memungkinkan Anda untuk memberikan nama path untuk berbagai.
Jika Anda hanya memberikan perintah, sistem operasi akan mencari perintah yang
di berbagai tempat.
Jika tersedia, harus menemukannya.
Komputer akan menemukan Bash dimanapun itu terletak dan menjalankannya,
sehingga Anda tidak perlu kemudian khawatir tentang di mana ia menemukan itu.
Ada kekhawatiran berpotensi lain di sini,
seolah-olah ada lebih dari 1 versi Bash, yang mungkin meskipun tidak mungkin.
Jadi itulah cara lain untuk menangani hal-hal ini.
Baris specifier dapat memanggil shell apapun.
Mereka juga dapat memanggil hal-hal lain selain kerang.
Contoh yang saya miliki di sini sed, yang merupakan editor stream;
awk, yang merupakan bahasa pengolahan pola;
dan perl, bahasa scripting yang sangat sangat maju.
Jika Anda meletakkan baris specifier yang menunjukkan salah satu dari program-program di awal,
itu akan langsung masuk ke program yang bukan dimulai shell.
Program-program memiliki batas kemampuan mereka.
Perl sangat mampu. Sed adalah editor. Hal ini dapat melakukan hal-hal lebih dari sekedar mengedit.
Tapi mungkin sulit untuk program itu.
Selain itu, lewat argumen dan hal-hal untuk script tidak mungkin atau membingungkan.
Jadi dalam kasus-kasus, dengan awk atau sed, itu, setidaknya dalam pengalaman saya,
lebih baik untuk menulis sebuah shell skrip dan panggilan awk atau sed dari shell script
daripada memanggil awk atau sed sebagai garis naskah specifier.
Perl adalah bahasa yang sangat beragam, seperti yang saya katakan.
Anda tidak dapat menjalankan perintah interaktif di perl,
yang berarti bahwa Anda tidak dapat menguji bagian dari script yang Anda sedang mengembangkan
dengan menjalankan mereka secara interaktif.
Namun, itu bahasa yang sangat mampu
dan telah berkembang menjadi sebuah alat yang sangat banyak digunakan.
Itu hanya sedikit pernyataan sisipan tentang garis specifier.
>> Dalam semua atau sebagian besar bentuk Linux - lagi, saya tidak bisa memastikan itu saja -
dan di Mac OS, jika Anda mengetik csh Anda mendapatkan tcsh,
dan jika Anda mengetik sh Anda mendapatkan bash.
Mereka mencoba ada untuk memberikan versi yang lebih canggih dari kerang ini,
tetapi hal ini dapat membingungkan.
Jika Anda menulis naskah menggunakan tcsh atau Bash fitur sambil menelepon csh atau sh
dan kemudian mencoba untuk menjalankannya pada komputer yang tidak memiliki tcsh atau Bash,
Anda mungkin mendapatkan beberapa error jika ada perintah dalam sana
yang kerang yang tidak Anda kenal.
Selain itu, Anda mungkin telah dipanggil shell Anda pada komputer lokal Anda
menyebutnya sebagai sh atau csh dan kemudian mendapatkan kerang lebih maju.
Anda mungkin tidak berpikir tentang fakta bahwa Anda menggunakan shell yang lebih maju.
Jadi ini adalah perangkap potensial.
Bagaimana itu ditetapkan bahwa jika Anda mengetik sh Anda mendapatkan Bash,
jika Anda mengetik csh Anda mendapatkan Tsch?
Ada hal-hal di komputer ini disebut link
yang dapat terhubung ke nama file untuk merujuk pada hal yang sama.
Hal ini dapat menjadi 2 nama untuk file yang sama atau file yang tujuannya adalah untuk merujuk ke file lain.
Mereka disebut hard link dan simbolik. Kami tidak akan masuk ke itu lagi hari ini.
Mungkin juga ada file terpisah - 1 file sh, 1 file Bash -
tapi mereka berdua menjalankan Bash.
Lalu ada kualifikasi lain di sini.
Jika Anda menelepon salah satu kerang ini dengan satu nama,
Anda mungkin berpikir Anda akan mendapatkan fungsi yang sama dengan menyebutnya dengan nama lain.
Nah, yang benar-benar belum tentu benar.
Perintah-perintah ini dapat memeriksa nama yang mereka disebut
dan mereka dapat, atas dasar nama itu, berperilaku berbeda.
Mungkin ada masalah mencoba untuk menyesuaikan diri dengan standar.
Beberapa dari Anda mungkin pernah mendengar tentang standar POSIX atau yang lain,
mungkin fitur lainnya.
Ini dapat dipilih kadang-kadang dengan argumen baris perintah
atau dengan pengaturan variabel shell.
Menyebutnya sebagai sh atau pesta benar-benar dapat menyebabkan eksekusi yang berbeda
bahkan jika itu file yang sama yang Anda mengeksekusi.
Hal lain yang perlu dipertimbangkan adalah bahwa bahkan jika komputer lain memiliki tcsh atau Bash,
jika mereka tidak terhubung seperti pada komputer lokal Anda
jika Anda memiliki komputer lokal Linux atau Mac OS,
sekali lagi Anda akan mendapatkan shell bahwa Anda menelepon sh atau csh, bukan salah satu yang mungkin Anda inginkan.
Saat Bourne shell memiliki perangkat yang lebih rendah dibandingkan dengan Bash
tapi masa lalu mereka di Bourne shell asli.
Sebagai hasil dari itu, bahkan saat Bourne shell, sh,
bahkan ketika itu tidak Bash, menyerupai bahasa C lebih dari C-shell tidak.
Itu tidak benar ketika C-shell pertama kali diciptakan, tetapi telah dikembangkan dengan cara itu.
Anda mungkin melihat di sini bahwa semua nama shell ini kecuali untuk shell Bourne
memiliki sesuatu untuk menunjukkan shell mereka - csh, bash -
tapi Bourne shell hanya sh.
Mengapa? Itu adalah shell asli.
Itu THE shell kemudian, bukan A shell,
dan karena itu shell THE, tidak ada alasan untuk membedakannya dari shell lain.
Jadi itulah mengapa ia memiliki nama itu dan masih tidak.
>> Atas ini di sini adalah garis dari database password untuk account saya telah ada
di komputer lain.
Aku akan mencoba untuk mendapatkan nama itu sehingga Anda dapat melihat bagian yang pada akhirnya, shell.
Database password memegang karakteristik Login untuk semua pengguna.
Pada awalnya adalah username, yang dapat Anda lihat 2 huruf terakhir saya sekarang.
Bidang sini dipisahkan oleh titik dua.
Bidang terakhir, seperti yang Anda lihat, adalah bin / tcsh, shell.
Itulah specifier shell.
Ada sesuatu yang menarik di sini.
Ketika Unix pertama kali dikembangkan, hanya ada 1 shell,
sehingga tidak ada pilihan di sana.
Jadi, mengapa mereka mengijinkan lapangan dalam database password untuk menentukan shell?
Aku tidak tahu, tapi beruntung bahwa mereka lakukan.
Ini agak sulit untuk membuat perubahan dalam format database password
karena banyak program mengacu pada format
dan harus ditulis ulang.
Ini adalah perkembangan sangat tepat atau kebetulan bahwa mereka termasuk bidang tersebut.
Semacam itu garis file password yang digunakan pada semua komputer Unix dan Linux sejauh yang saya tahu.
The Mac memiliki sistem sendiri.
Ini benar-benar memiliki file password dengan garis-garis dalam format tersebut,
tapi itu tidak di mana karakteristik pengguna didefinisikan.
Komentar kurung lain di sana.
>> Jika Anda menelepon shell, Anda dapat menyebutnya sebagai sub-shell kerang yang ada.
Jadi jika saya pergi di sini, mari kita menyingkirkan hal-hal ini.
Di sini saya di C-shell.
Variabel yang, yang secara akurat mengidentifikasi shell saya,
sebenarnya tidak selalu merupakan cara yang dapat diandalkan untuk menentukan apa shell Anda menjalankan,
tetapi dalam kasus ini itu.
Bagaimana jika saya hanya mengetik -
Sekarang aku di Bash.
Beberapa hal akan menjadi sama. ls memberitahu saya perintah saya.
Jika saya melakukan suspend kembali ke saya C-shell, ls, yang sama. Benar?
fg, latar depan, kembali ke shell Bash saya.
pwd, direktori saat ini, kembali ke C-shell.
pwd, berbeda direktori - sebenarnya bukan direktori yang berbeda dalam kasus ini.
Ini direktori yang sama.
Katakanlah saya ingin memanggil perintah di sini: mana ls.
Apa artinya itu lakukan?
Ini memberitahu saya di mana perintah ls,
salah satu yang memberi saya daftar direktori, terletak di ls.
Mari kita kembali ke Bash shell. Mari kita mencoba hal yang sama.
Hmm, menarik di sana, di mana: Perintah tidak ditemukan.
Mengapa demikian?
The dimana perintah dibangun ke dalam C-shell.
Ini bukan perintah yang harus dibaca ke memori dari tempat lain dan dieksekusi.
The C-shell berjalan dengan mentransfer eksekusi ke bagian kode sendiri
dan itu tidak di Bash shell.
Jadi Bash, tidak memiliki perintah seperti built-in, terlihat untuk itu, tidak menemukannya,
dan kita mendapatkan error.
Jadi ada kita memiliki shell Bash berjalan di bawah C-shell, dan kita sebut bahwa sub-shell.
Dan hanya dalam kasus Anda penasaran, Bash shell memiliki cara sendiri untuk mencari perintah.
hash mengacu pada fakta bahwa hal itu dapat dilaksanakan lebih cepat,
yang ditemukan lebih cepat.
Itulah salah satu perangkat tambahan dibangun untuk beberapa kerang ini.
>> Bourne-jenis kerang lebih disukai untuk pemrograman.
Mereka memiliki struktur kontrol seperti loop, pernyataan bersyarat,
jenis perintah yang mungkin Anda gunakan dalam bahasa pemrograman seperti C
atau bahasa apa pun. Mungkin Anda pemrograman di Jawa atau apa pun.
Kerang memiliki orang-orang juga.
Kerang Bourne-jenis, khususnya Bash, memiliki lebih
dan mereka dirancang dengan fleksibilitas yang lebih besar.
The Bash shell memiliki array. Asli Bourne shell tidak.
Sehingga dapat jauh menguntungkan untuk pemrograman.
The C-shell sebenarnya memiliki array tetapi tidak memiliki banyak fitur-fitur lainnya.
The Bourne-jenis kerang akan mengeksekusi lebih cepat
jika mereka tidak memiliki fitur yang ditujukan untuk penggunaan interaktif.
Anda memuat segalanya untuk satu tujuan, ini beban mereka turun untuk tujuan lain.
Ada yang trade-off di sana.
Fitur-fitur yang ditujukan untuk penggunaan interaktif
benar-benar sedikit atau tidak digunakan untuk scripting.
Ini mungkin untuk menggunakan sub-shell interaktif seperti yang saya mulai ada
untuk menguji perintah yang ingin Anda gunakan dalam script.
Itulah yang tidak dapat Anda lakukan dengan perl. Anda dapat melakukannya dengan kerang.
Bahkan struktur seperti untuk loop dan sebagainya dapat dijalankan secara interaktif.
Mereka kadang-kadang berguna untuk menjalankan secara interaktif,
tapi lebih mungkin Anda menggunakan mereka untuk mengembangkan naskah.
>> Alias.
Ini akan menjadi tentang C-shell.
Mekanisme sejarah di mana Anda kembali ke perintah sebelumnya
atau bagian dari mereka bahwa Anda sudah menjalankan.
Sekali lagi, tentang C-shell, shell Bourne dan Korn shell memiliki hal-hal ini,
tapi aku tidak akan masuk ke mereka.
Jadi di sini adalah beberapa alias berguna yang saya miliki.
Daripada mengetik ls - itu adalah perintah umum -
cukup ketik l dan menyelamatkan diri 1 karakter.
ls dengan berbagai pilihan, semua pekerjaan tersebut.
Perhatikan bahwa definisi tersebut memiliki kutipan di sekitar mereka.
Dalam kasus ini, tanda kutip tidak diperlukan.
Jika Anda dapat menentukan orang-orang alias tanpa tanda kutip, itu akan tetap bekerja.
Mereka dianjurkan.
Ada situasi di mana Anda tidak dapat menggunakan kutipan
karena Anda ingin sesuatu terjadi yang akan mencegah kutipan.
Kadang-kadang Anda dapat mengutip bagian dari definisi, tetapi tidak semuanya.
Ini juga umumnya dianjurkan untuk menggunakan tanda kutip tunggal daripada tanda kutip ganda.
Tanda kutip ganda memiliki efek pada definisi variabel,
terutama menyebabkan mereka untuk dievaluasi daripada menghentikannya.
Mengapa kita ingin menghentikan evaluasi?
Dan bagaimana kutipan melakukannya untuk kami?
>> Berikut adalah perintah yang mungkin menarik minat Anda.
'Ls g *'
g *, karena Anda mungkin tahu, adalah ekspresi wildcard
untuk semua nama file yang dimulai dengan g.
Jika saya hanya menulis dalam perintah ls g *, saya akan mendapatkan daftar semua nama mereka dalam direktori saya saat ini.
Jika saya mendefinisikan alias yang seperti itu di sini dengan tanda kutip,
itu akan menjalankan perintah yang di direktori saat ini di mana Anda menjalankannya.
Tapi jika Anda menjalankan definisi alias tanpa tanda kutip,
itu akan mengevaluasi wildcard g * ketika berjalan perintah mendefinisikan ini.
Jadi definisi alias akan ls diikuti dengan daftar file dalam direktori
di mana perintah alias dijalankan,
terlepas dari di mana Anda benar-benar berniat untuk menjalankan perintah.
Hal ini tidak banyak berguna, dan tanda kutip tunggal mencegah evaluasi tanda bintang.
Jadi Anda hanya mendapatkan definisi makhluk ls g *.
Kemudian ketika Anda menjalankan alias, Pemda, kemudian menempatkan yang keluar.
Sekarang tidak ada tanda kutip, dan akan mengevaluasi tanda bintang ketika Anda menjalankan perintah alias.
Jadi itu satu hal.
Tanda kutip ganda akan memiliki efek yang sama di sini,
tetapi ada kasus lain di mana tanda kutip ganda tidak akan bekerja dengan baik.
>> Berikut ini adalah satu sama lain.
Anda mungkin tahu perintah grep.
Perintah grep dapat digunakan untuk memindai file untuk baris yang memiliki string tertentu.
Jadi mari kita pergi ke sini dan saya akan keluar dari shell Bourne saya.
Oke. Berikut adalah file.
Katakanlah itu grep string abc. Ada itu.
Jika saya melakukan zddd grep, saya mendapatkan apa-apa. Oke.
Jadi menemukan string, itu laporan, ia tidak menemukan, itu tidak melaporkannya.
Ini output setiap baris yang memiliki string yang di atasnya.
Ada berbagai macam pilihan di sini yang dapat Anda temukan dalam dokumentasi.
Berikut ini salah satu cara untuk melakukannya.
Bagaimana dengan yang satu ini, alias grabc 'grep abc'?
Itu akan mencakup 1 argumen ketika alias didefinisikan.
Jadi jika saya melakukannya di sini, jika saya lakukan grabc,
sekarang alias mencakup lebih dari perintah sederhana. Ia juga memiliki argumen.
Sejauh ini yang bekerja.
Saya memiliki perintah lain di sini, yang satu ini, sehingga mereka adalah string yang berbeda di sana
dan menunjukkan bahwa ini tidak menemukan apa pun di sana karena tidak cocok.
>> Bagaimana jika saya ingin memasukkan dalam definisi alias file yang aku akan mencari
dan saya ingin memberikan sebagai argumen ke alias string yang saya cari?
Saya mungkin ingin mengatakan abc sebagai argumen ke alias saya,
tapi alias sudah ditentukan file.
Dan di situlah ungkapan ini masuk
Perhatikan di sini kita memiliki grep seperti sebelumnya.
Kami memiliki file di sini, string.
\ ^, Jenis ekspresi aneh, saya kira, jika Anda belum melihat ini sebelumnya.
Tanda seru adalah bagian dari mekanisme sejarah C-shell.
Hal ini dapat mengingat perintah sebelumnya, dapat mengingat argumen untuk perintah-perintah dan sebagainya.
Mekanisme sejarah digunakan sebagai bagian dari aliasing.
Jika Anda menentukan baris setelah tanda seru, itu akan mengacu pada garis yang dalam daftar sejarah,
yang kita tidak akan masuk ke sekarang karena itu seluruh topik lainnya.
Hal ini dimungkinkan untuk menentukan bagian dari sebuah garis.
Jadi! 03:02 akan menjadi argumen kedua dari perintah nomor 3.
Tanda sisipan di sini dalam ekspresi ini singkatan dari argumen pertama.
Jika Anda tidak memberikan indikasi yang perintah yang Anda maksud,
mengacu pada perintah segera sebelumnya,
dan tanda sisipan adalah simbol argumen pertama.
Karena itu adalah tanda sisipan dan tidak nomor tersebut, Anda tidak perlu menggunakan usus besar,
begitu! ^ berarti argumen pertama dengan perintah sebelumnya.
Sedikit bercampur di sini.
Dalam hal ini, ketika Anda menggunakan ini sebagai definisi alias,
referensi sejarah mengacu kembali ke perintah di mana alias digunakan.
Jadi ini akan kembali 1 perintah sebagai operasi sejarah,
tetapi sebagai sebuah operasi alias mengacu pada perintah di mana Anda akan ketik,
mengatakan, grstrings_file.
Kami memiliki tanda kutip di sini di dalamnya. Apa backslash untuk?
Dalam hal ini, seperti di tempat lain, kita tidak ingin menjalankan mekanisme sejarah
sementara mendefinisikan alias.
Jika kita tidak memiliki backslash ada, shell akan menarik argumen pertama
perintah tepat sebelum menjalankan perintah alias ini, yang tidak kita inginkan.
Kami ingin hal ini dibangun untuk perintah alias untuk memanggil argumen kemudian.
Tanda kutip tunggal tidak melarikan diri tanda seru, referensi sejarah.
Mungkin Anda tahu ekspresi melarikan diri berarti mengubah makna sesuatu.
Dalam hal ini, itu berarti untuk menghentikan sesuatu dari memiliki arti khusus.
Arti khusus seru titik adalah sejarah.
Melarikan diri dan tidak memiliki makna itu.
Kutipan tidak melakukan itu, backslash tidak.
Jadi kita benar-benar menggunakan 2 tingkat melarikan diri di sini.
Aku akan memindahkan perintah ini ke jendela lain tanpa mengetik
dengan menggunakan operasi pengeditan ini, yang Anda mungkin menemukan berguna.
Sesuatu yang lain di sini saya akan menunjukkan kepada Anda.
Jika Anda hanya mengetik alias tanpa argumen, ia memberitahu Anda semua argumen Anda.
Ini adalah sekelompok alias saya sudah punya di sini
selain orang-orang yang telah saya gunakan di sini hari ini.
Tapi jika saya hanya mengetik dengan nama alias, ia memberitahu saya apa artinya.
Perhatikan bahwa tanda kutip hilang dan backslash itu hilang.
String ini di sini adalah hasil dari definisi alias,
dan sekarang baru saja! ^ di dalamnya.
Hal ini akan terlihat dalam string berkas untuk apa pun.
Jadi jika saya melakukan string grstrings_file, saya tidak memberikan apa-apa untuk mencari di sana,
tapi itu terlihat dalam string.
Itu tidak menemukan string kata dalam string berkas, tetapi tidak menemukan abc.
Dan tidak menemukan bahwa.
Jadi di sini kita memberikan argumen yang hits dalam definisi alias,
yang dimasukkan ke dalamnya.
Ini di mana ungkapan ini berasal dari.
Anda dapat menggunakan lebih dari 1.
Tanda sisipan adalah simbol argumen pertama.
Jika Anda ingin menggunakan argumen kedua, maka Anda akan berkata: 2.
Tidak ada simbol khusus untuk argumen kedua.
Dan karena Anda menggunakan angka, Anda harus menggunakan usus besar.
Ada, bagaimanapun, pilihan lain di sini.
Tanda dolar singkatan argumen terakhir.
Dan karena ini adalah sebuah simbol, Anda dapat menghilangkan usus besar.
Jadi itu akan menjadi argumen terakhir dalam daftar.
Dan ada juga yang satu itu.
Asterisk berarti semua, jadi ini adalah daftar argumen yang lengkap,
dan sekali lagi, Anda dapat menghilangkan usus besar karena itu bukan angka yang.
Saya harap Anda semua mengamati semua ini.
>> Mekanisme sejarah dapat kembali ke garis awal dalam daftar sejarah.
Anda bisa melakukan hal ini dalam sebuah definisi alias.
Aku belum pernah melihat ini dilakukan.
Ini akan memiliki efek menarik keluar perintah sebelumnya dari daftar sejarah
ketika Anda mengeksekusi alias, yang bisa menjadi perintah yang berbeda
tergantung kapan dan di mana Anda jalankan.
Dapat dibayangkan Anda mungkin ingin mencabut referensi seperti
hanya untuk mengetahui apa perintah sebelumnya adalah.
Aku belum pernah melihat hal ini terjadi.
Saya kira seseorang mungkin ingin, tapi ini sangat tidak mungkin.
Ada hal lain di sini.
Jika Anda menggunakan referensi sejarah-jenis,
maka hanya argumen yang ada referensi seperti digunakan.
Jika Anda memiliki definisi alias yang tidak menggunakan referensi sejarah-jenis,
jika hanya menjadi awal perintah
dan Anda memiliki argumen lebih lanjut, maka apa pun yang Anda ketik setelah itu
akan ditambahkan ke perintah.
Dalam hal ini, contoh yang saya hanya memberi sana, kami menggunakan argumen pertama;
kita tidak menggunakan orang lain.
Jika argumen lain telah diberikan pada baris perintah, mereka tidak akan digunakan.
Jadi jika Anda menggunakan referensi sejarah sama sekali, maka Anda harus menggunakannya untuk mendapatkan argumen apapun.
>> Ada hal lain di sini saya hanya ingin menyebutkan, sebagian sambil lalu,
yaitu bahwa mekanisme ini sejarah dengan tanda seru
kembali ke asli C-shell.
Tcsh memperkenalkan operasi sejarah
yang menggunakan macam perintah dan string dari editor,
baik Emacs atau vi.
Pendapat pribadi saya adalah Emacs adalah jauh lebih mudah digunakan untuk tujuan ini
bahkan jika Anda menggunakan vi untuk mengedit biasa.
Ada berbagai perintah Emacs yang sekarang diadaptasi untuk sejarah.
Kontrol P mendapat baris sebelumnya dalam daftar sejarah.
Lain Kontrol P akan membuat Anda mendapatkan satu sebelum itu.
Panah atas melakukan hal yang sama.
Kontrol N mendapat perintah selanjutnya jika Anda sudah menggulir kembali beberapa cara.
Panah bawah apakah itu juga.
Anda dapat bergerak ke kiri ke kanan dengan panah dan berbagai hal lainnya.
Hal ini dapat menggunakan mekanisme sejarah
jauh lebih mudah daripada menggunakan sintaks tanda seru,
tetapi Anda tidak akan menggunakan bahwa dalam definisi alias.
Kita akan pergi lebih dari itu beberapa waktu lain.
>> Variabel.
Kau tahu apa variabel dalam bahasa pemrograman.
Kerang memiliki mereka juga.
The C-shell menggunakan perintah set untuk menetapkan variabel,
sehingga menetapkan variabel dengan nilai b -
seperti yang saya katakan, definisi berguna tapi sebuah ilustrasi tentang bagaimana ini digunakan.
Set perintah akan menciptakan variabel jika tidak sudah ada.
Parameter posisi untuk script shell dapat dianggap variabel,
tetapi penggunaan mereka dan aturan untuk mereka agak berbeda.
Anda tidak dapat memberikan nilai ke $ 1 dalam perjalanan naskah.
Anda harus mendefinisikan sebuah variabel baru untuk tujuan itu jika beberapa dari Anda ingin.
Ketik ditetapkan tanpa argumen dan Anda mendapatkan daftar semua variabel yang didefinisikan saat ini.
Dan mari kita ke shell saya yang lain di sini dan melihat apa yang kita dapatkan jika kita melakukan itu.
Cukup daftar panjang di sana, kan?
Gulir ke atas sedikit. Lihatlah semua itu.
Beberapa hal-hal ini didefinisikan secara otomatis oleh shell.
Shell menciptakan variabel dan memberikan nilai.
Beberapa dari mereka didefinisikan oleh shell tapi kemudian didefinisikan ulang oleh pengguna
sesuai dengan preferensi nya.
Dan beberapa dari mereka yang dibuat oleh pengguna tergantung pada apa yang dia lakukan hari itu.
Itu hanya diatur tanpa argumen.
Ada fitur yang aneh di sini hal ini.
Ada harus baik tanpa spasi antara tanda sama dan nama variabel
dan nilai atau ruang di kedua sisi tanda sama dengan,
seperti yang satu ini.
Ini tidak akan bekerja, dan ini sebenarnya adalah perintah yang valid
tetapi tidak akan melakukan apa yang Anda inginkan.
Perintah tersebut akan berhasil karena jika Anda hanya mengatakan mengatur dan nama variabel
tanpa tanda sama dengan atau mengatur dan nama variabel dengan tanda sama dengan dan tidak ada nilai,
itu akan mengatur variabel ke nilai null.
Jadi menetapkan = adalah perintah yang valid.
Set perintah dapat menentukan lebih dari 1 variabel pada baris yang sama.
Jadi perintah ini di sini memiliki efek mendefinisikan a dan b ke nilai null.
Mungkin tidak apa yang Anda inginkan.
Yang satu ini di sini, disebutkan sebelumnya, akan menyebabkan kesalahan
karena = b bukan merupakan ekspresi yang valid.
Sebuah nama variabel tidak dapat dimulai dengan tanda sama dengan.
Dan ada hal-hal lebih lanjut di sini.
Titik dua digunakan untuk memilih argumen dari garis sejarah,
dan mereka dapat digunakan - dan saya tidak pergi ke sebelumnya - untuk mengubah hal-hal.
Mereka juga dapat digunakan untuk memodifikasi variabel shell.
Yang satu ini di sini, $ a, memiliki nilai.
: R akan melepas perpanjangan.
Perpanjangan akan menjadi apa-apa setelah dot,
titik dan apa pun mengikutinya pada akhir file,
hanya pada akhir dari daftar setelah garis miring terakhir.
Jadi saya memilikinya di sini.
adalah bahwa. Ini akan drop. O.
Jika tidak ada perpanjangan, hanya nama path setelah slash terakhir, tidak akan berpengaruh.
a: h, bahwa ekspresi variabel, akan melepas elemen terakhir dari daftar direktori,
lagi, hanya setelah slash terakhir.
Jadi / a / b / c menjadi / a / b,
tapi yang satu ini berubah karena unsur setelah daftar adalah null.
Di sini ada sesuatu yang juga saya ingin menekankan.
Kualifikasi ini tidak mencari keberadaan file ini.
Mereka hanya mencari string.
Ini dimaksudkan untuk memanipulasi nama file, nama path,
tetapi mereka dapat digunakan pada tali apapun, bahkan jika itu bukan nama file.
Dan mereka tidak mencari keberadaan,
jadi jika tidak ada seperti file, / a / b / c, ini akan tetap bekerja.
Entah itu gunanya adalah pertanyaan lain, tapi akan tetap bekerja.
Variabel yang berbeda pada kulit Bourne. Kita akan sampai ke itu nanti.
Dollar tanda dapat melarikan diri seperti tanda seru dan tanda bintang.
Dollar tanda dapat lolos dengan backslash atau tanda kutip tunggal.
Tanda kutip ganda memiliki efek aneh dalam semua kerang
memaksa evaluasi dolar tanda ekspresi variabel.
Jadi jika itu sedang melarikan diri salah satu cara, tanda kutip ganda dapat memiliki efek
menyebabkan itu harus dievaluasi pula.
Ini sedikit membingungkan.
Jika ada beberapa tingkatan melarikan diri, seperti tanda kutip tunggal dalam tanda kutip ganda
atau tanda kutip ganda dalam tanda kutip tunggal, Anda harus menguji untuk melihat apa yang akan terjadi
ke variabel jika Anda menggunakan salah satu.
Mereka 2 situasi - dalam dua tunggal, dalam satu ganda -
tidak selalu memberikan hasil yang sama.
Variabel lingkungan, variabel terikat C-shell.
Variabel lingkungan juga variabel dalam C-shell,
dan mereka juga variabel dalam kerang lain juga.
Dalam C-shell, mereka adalah set yang berbeda.
Hal-hal yang saya katakan sebelumnya sekitar variabel shell.
Variabel lingkungan adalah seperangkat berbeda variabel
dengan pengecualian dari beberapa variabel yang kita sebut variabel terikat,
yang sangat penting dan kami akan masuk ke orang-orang kemudian.
Variabel lingkungan secara otomatis diteruskan
untuk kerang atau perintah yang dijalankan dari shell Anda.
Hal-hal lain tidak. Variabel shell, alias tidak. Variabel lingkungan adalah.
Itulah mengapa kami menyebutnya variabel lingkungan,
gagasan bahwa lingkungan meluas melewati hanya shell Anda saat ini.
Mereka dapat digunakan untuk menentukan hal-hal untuk perintah.
Berikut adalah contoh. PRINTER, LPDEST.
Kedua variabel tersebut dapat menentukan printer yang akan menggunakan perintah untuk mencetak sesuatu.
Jika Anda memiliki beberapa printer sekitar, Anda mungkin ingin menempatkan yang Anda sukai.
Alasan kami memiliki 2 variabel adalah bahwa set yang berbeda dari perintah yang ditulis
menggunakan variabel-variabel yang berbeda.
Anda mungkin memberi mereka nilai yang berbeda.
Kemungkinan besar Anda akan memberi mereka baik nilai yang sama.
Hal-hal bekerja karena perintah yang melakukan pencetakan
diprogram untuk memeriksa nilai-nilai variabel tersebut.
Jika program tidak ditulis seperti itu, jika ditulis untuk melakukan sesuatu yang lain,
variabel akan menjadi tidak relevan.
Jadi sistem operasi tidak mencari variabel-variabel ini
setiap kali Anda merujuk ke printer.
Perintah yang melakukan pencetakan mencari variabel-variabel ini jika diprogram seperti itu.
Variabel ini sering didefinisikan dalam file inisialisasi Anda
tetapi tidak harus.
Anda dapat mendefinisikan mereka pada baris perintah.
Mereka dapat didefinisikan dalam perintah.
Perintah yang berjalan sesuatu mungkin memiliki pilihan sendiri variabel -
variabel yang unik untuk paket perangkat lunak tertentu, misalnya.
Mereka akan didefinisikan ketika Anda menjalankan paket tersebut.
Bagaimana variabel-variabel ini dilewatkan ke sub-shell?
Ketika sub-shell ditulis, tidak menulis ke daerah itu.
Luas sub-shell yang dikhususkan untuk variabel lingkungan
tidak ditulis oleh sub-shell, melainkan ditulis oleh menyalin.
Bila Anda menjalankan perintah biasa, seperti perintah ini untuk mencetak atau apa pun,
mereka memulai dengan membuat shell baru.
Shell menciptakan shell dan kemudian menimpa bagian dari itu
dengan perintah yang Anda jalankan, yang sedikit membingungkan,
tapi itulah cara perintah ini mendapatkan variabel lingkungan
bahwa mereka kemudian merujuk nanti.
Perintah di sini untuk mendefinisikan variabel setenv.
Itulah cara Anda mendefinisikannya. Ini 3 elemen: setenv, variabel, nilai.
Jika Anda hanya setenv tanpa argumen, apa yang Anda dapatkan?
Daftar semua variabel tersebut.
Sekali lagi, itu adalah daftar panjang yang bagus dan dalam hal ini, seperti dalam yang lain,
variabel-variabel ini didefinisikan terutama oleh operasi login saya oleh shell sendiri
bukan oleh apapun yang saya lakukan.
Ada perintah lain di sini, printenv.
Itu juga mencetak lingkungan.
Perhatikan hal terakhir ini di sini, EDITOR = vi.
Yang mengatakan bahwa jika saya menggunakan sesuatu yang disebut editor
dan saya tidak menentukan editor dan memungkinkan saya pilihan, mungkin memberikan saya vi.
Bagaimana jika saya melakukan EDITOR printenv? Ini memberitahu saya apa itu.
Tepat sebelum itu, ada variabel, KURANG.
Ini adalah pilihan default Anda ketika saya menjalankan perintah KURANG,
yang menampilkan file.
Jadi jika saya melakukan itu, printenv dapat mengambil 1 argumen atau 0 argumen,
tidak lebih dari 1.
Ada perintah lain juga, tapi kami tidak akan masuk ke semua itu hari ini.
Ingat ada pengubah untuk variabel shell seperti: h,
yang akan menjatuhkan elemen terakhir dari sebuah pathname,
atau: r, yang akan turun perpanjangan.
Mereka sekarang berlaku untuk variabel lingkungan juga. Mereka tidak terbiasa.
Dulu mereka tidak bisa diubah. Sekarang mereka dapat.
Ini salah satu kemajuan dengan perkembangan dari kerang selama bertahun-tahun.
Saya mengatakan bahwa kerang sebagai bagian dari lingkungan
dan variabel shell di C-shell, dengan beberapa pengecualian, set yang berbeda.
Anda dapat membuat variabel lingkungan dan variabel shell dengan nama yang sama.
Mereka akan menjadi variabel yang berbeda, mereka dapat memiliki nilai yang berbeda.
Mengubah nilai dari satu tidak akan mengubah nilai yang lain.
Variabel-variabel ini semua dievaluasi dengan tanda dolar - $ a, $ apapun.
Jadi bagaimana jika Anda memiliki ini? Apakah Anda tahu mana yang Anda dapatkan?
Dalam tes saya, saya punya variabel shell,
tapi ini tidak didokumentasikan dan Anda tidak dapat bergantung pada itu.
Jadi saya meminta Anda, menciptakan shell dan variabel lingkungan
dengan nama yang sama ide yang baik? Tidak Oke.
Apa itu pengecualian utama di mana lingkungan dan shell variabel
dihubungkan satu sama lain?
Ada 4 ini.
Huruf kapital variabel lingkungan TERM,
shell istilah variabel dalam huruf kecil, jenis emulasi terminal.
Aku hanya akan pergi di sini dan aku akan melakukan gema, perintah yang berguna di sini,
$ $ JANGKA istilah. Dan ada.
xterm adalah jenis terminal untuk windows ditampilkan di System x Jendela.
xterm-warna adalah variasi yang yang memungkinkan warna berbeda.
Mengapa kita mendefinisikan ini? Apa ini baik untuk?
Perintah yang mengatur ulang layar seperti editor
mengirim urutan tertentu, yang disebut escape sequence,
ke terminal atau jendela untuk mengatur ulang dan sebagainya.
Mereka urutan yang berbeda untuk berbagai jenis terminal.
Ini memberitahu itu mana yang akan digunakan.
Kadang-kadang ada masalah di sana.
Anda mungkin ingin mengubah itu.
Jika hal-hal yang tidak bekerja, kadang-kadang jenis terminal diatur salah,
Anda mungkin dapat memperbaikinya dengan mendefinisikan variabel panjang.
Dalam kasus ini, mengubah satu variabel, variabel lingkungan atau variabel shell,
harus mengubah yang lain.
Saya telah menemukan melalui pengalaman yang mengubah TERM dalam huruf kapital
tidak selalu mengubah shell istilah variabel dalam huruf kecil.
Ini adalah bug.
Saya tidak tahu apakah itu selalu benar. Sebagian besar waktu itu tidak benar, tetapi bisa.
Jadi, jika Anda membuat perubahan, hanya memeriksa yang keluar.
Hal ini tidak sering bahwa Anda perlu mengubah nilai itu, tapi sesekali Anda lakukan.
Lingkungan PENGGUNA variabel.
Sekali lagi, variabel lingkungan dalam huruf kapital, shell variabel dalam huruf kecil.
Ini adalah nama pengguna.
Ini hanya dalam keadaan yang sangat luar biasa
bahwa Anda akan ingin mengubah itu.
Jika username Anda adalah orang lain, hal itu dapat membuang segala macam hal off.
Direktori home, direktori home pengguna.
Sekali lagi, Anda tidak ingin mengubah itu.
Perhatikan dalam semua kasus ini dan salah satu yang kita akan menutupi, variabel path,
variabel lingkungan dalam huruf kapital dan variabel shell terikat dalam huruf kecil.
Jika Anda mengubah satu, Anda harus mengubah yang lain.
Semacam ini mengikat tidak dapat dibangun karena Anda tidak dapat mengikat 2 variabel,
selain ini 4, dan mengikat variabel-variabel ini tidak dapat dibatalkan,
Anda tidak bisa memisahkan mereka.
Jadi ini 4 pasang variabel terikat.
Mereka selalu akan. Tidak ada orang lain akan.
Selain itu, akan ada kemungkinan untuk membuat variabel dengan nama yang sama
dari jenis yang berlawanan.
Anda bisa membuat istilah variabel shell dalam huruf kecil
atau lingkungan TERM variabel dalam huruf kapital.
Variabel tersebut akan menjadi independen dari variabel-variabel dipasangkan
dan mereka akan independen satu sama lain.
Aku tidak bisa membayangkan mengapa Anda akan melakukan hal itu kecuali jika Anda ingin membingungkan orang.
Yang satu ini di sini, variabel path, ini adalah salah satu yang benar-benar penting.
Hal lain di sini adalah bahwa bisa ada kasus
variabel dengan nama Paduan sama yang tidak terikat satu sama lain.
Ada dapat variabel, SHELL dan shell, dalam huruf besar dan kecil.
Berdasarkan nama itu, Anda tidak tahu apakah variabel itu adalah variabel shell
atau variabel lingkungan, dan mereka tidak terikat satu sama lain.
Sehingga jenis nama dipasangkan tidak berarti variabel terikat.
Variabel path, yang saya menunjukkan sebelumnya,
adalah daftar nama path dimana shell akan mencari perintah.
Mari kita ke jendela ini di sini dan kami akan melakukan echo $ PATH, huruf kapital -
variabel lingkungan - echo $ path, huruf kecil - shell variabel.
Perhatikan bahwa daftar direktori adalah sama. Ini terikat.
Mengubah satu, Anda mengubah lain.
Dalam variabel lingkungan elemen dipisahkan oleh titik dua. Perhatikan bahwa.
Variabel shell dipisahkan oleh spasi.
Variabel lingkungan ini adalah string tunggal.
Variabel shell adalah array.
The Bourne shell tidak memiliki array.
Bash tidak, tapi ini sudah menjadi bagian tetap dari shell.
Ini adalah string tunggal dan bukan array.
The C-shell selalu memiliki array.
Array jauh lebih mudah untuk bekerja dengan.
Anda dapat merujuk ke bagian itu.
$ Path Jadi gema [1] dan saya mendapatkan / usr / bin, elemen pertama.
Sekali lagi, ingat dollar tanda singkatan dari elemen terakhir dari daftar sejarah.
Apa yang terjadi di sana? Ia mencoba untuk menemukan tanda dolar sebagai simbol variabel.
Aku menghindarinya. Oops. Itu tidak akan mengambil yang baik.
Beberapa hal-hal ini tidak bekerja dengan baik.
Mungkin kita hanya akan meninggalkan hal itu.
Asterisk mengacu pada semuanya, tapi itulah apa yang Anda dapatkan jika Anda tidak menentukan elemen.
Cara lain bahwa variabel array dapat dimanipulasi,
jumlah elemen di sana, 7 elemen.
Di sini kita menempatkan tanda pound sebelum nama variabel.
Ini satu lagi. Pasang tanda tanya di sana.
Itu adalah nilai logis. Itu menunjukkan bahwa variabel yang ada.
Ini cara lain untuk bekerja dengan variabel.
Itu, by the way, tidak harus menjadi variabel array.
Itu bisa menjadi variabel apapun.
Dan jika saya lakukan, tidak ada variabel tersebut dan saya mendapatkan 0.
Lain hal kecil di sana tentang evaluasi variabel.
Kembali ke satu ini di sini, jika karena alasan tertentu Anda ingin bekerja dengan ini
daripada bekerja dengan array, variabel shell,
ada perintah yang dapat memisahkan hal-hal ini didasarkan pada usus besar.
Bahkan, jika Anda akan melakukan hal ini di Bash shell mungkin,
semacam script, yang akan mungkin bagaimana Anda akan melakukannya.
Tapi di C-shell itu jauh lebih mudah untuk menggunakan array.
Di Bourne shell, variabel ditugaskan oleh ekspresi tunggal seperti ini,
seperti cara Anda dapat menetapkan variabel dalam bahasa pemrograman,
dan di sini tidak boleh ada spasi.
Ini penting bahwa itu hanya 1 string.
Dalam kerang Bourne-type, semua variabel adalah variabel shell.
Variabel lingkungan adalah subset dari variabel shell.
Mereka dibedakan dari variabel non-lingkungan dengan mengekspor.
Perintah untuk melakukannya adalah ekspor, seperti ekspor PRINTER.
Jika kita mendefinisikan variabel tersebut,
jika kita ingin perintah pencetakan untuk menemukan itu, itu akan menjadi variabel lingkungan,
dan itulah bagaimana kita membuat satu.
Di sini ada sesuatu yang agak membingungkan.
Ungkapan ini, ekspor ke lingkungan, berasal dari konsep shell Bourne ini,
namun ekspresi yang digunakan dalam deskripsi dari C-shell,
dimana tidak ada perintah seperti ekspor.
Jika Anda hanya mengatakan ekspor dengan sendirinya, Anda mendapatkan daftar diekspor -
Jadi jika saya hanya melakukan ekspor di sini, tidak ada hal seperti itu.
Oke, di sana kita pergi.
Hal-hal ini, by the way, juga didefinisikan oleh shell.
Saya tidak menentukan semua ini sendiri.
Shell melakukan segala macam hal dengan sendirinya.
Ini harus melakukan hal-hal secara otomatis.
Dalam Bash atau Korn shell, Anda dapat menjalankan perintah seperti ini,
yang keduanya akan memberikan variabel nilai dan mengekspornya dalam 1 perintah.
Dalam shell Bourne mereka harus perintah yang terpisah seperti ekspor a.
Berikut ini adalah aspek lain yang membingungkan.
Perintah set di C-shell mendefinisikan variabel
dan tanpa argumen memberitahu Anda apa nilai-nilai variabel 'adalah.
Dalam Bash shell, perintah set tanpa argumen melakukan hal yang sama,
tetapi dengan argumen itu tidak sesuatu yang sangat berbeda.
Jadi ini adalah berbagai argumen di sini.
Beberapa di antaranya adalah variabel lingkungan, beberapa dari mereka adalah variabel shell.
Semua dari mereka adalah variabel shell sebenarnya. Beberapa dari mereka adalah variabel lingkungan.
Set perintah dengan argumen dapat digunakan untuk mengoperasikan
pada parameter posisi ke script,
yang merupakan cara untuk mendapatkan semuanya sekaligus.
Kita tidak bisa benar-benar masuk ke hari ini.
Hal ini juga dapat digunakan untuk mengubah perilaku shell.
Khususnya di Bash ada variabel yang akan menentukan bagaimana shell berperilaku.
Kemudian juga hanya satu perintah ini yang mungkin Anda lihat, perintah ini.
Mengeset diikuti oleh variabel dan jenis variabel yang digunakan dalam shell Korn dan Bash.
Ini tidak wajib tetapi dapat digunakan untuk membatasi nilai-nilai variabel,
yang dapat berguna untuk mencegah kesalahan, dan itu cukup umum.
Jadi aku hanya menyebutkan bahwa dalam kasus Anda melihatnya di suatu tempat.
Perintah mana.
Ingat saya sebutkan sebelumnya di mana perintah dalam C-shell,
yang dapat memberitahu Anda lokasi pathname perintah.
Berikut adalah substitusi perintah.
Anda harus menemukan pada keyboard Anda di suatu tempat karakter yang terlihat seperti ini.
Lokasi di keyboard akan bervariasi.
Kami telah menyebutnya backquote. Ini tentang ukuran penawaran.
It goes dari kiri atas ke kanan bawah.
Di sini pada keyboard Mac saya itu di sudut kiri atas.
Karakter yang dapat digunakan untuk mengeksekusi perintah dalam perintah.
Jika Anda memiliki ekspresi dalam backquotes,
ungkapan itu adalah perintah, itu berjalan.
Output dari perintah yang
kemudian diganti untuk seluruh ekspresi backquote
dalam perintah lagi yang kemudian berjalan dengan output yang
sebagai bagian dari string nya argumen dan sebagainya.
Berikut adalah perintah yang menggunakan itu.
Mari kita menunjukkan operasi di sini.
Mari kita pergi di sini, mengambil backquotes.
Kontrol A mendapatkan saya ke awal baris dengan sintaks editing Emacs.
Sejauh ini nama path adalah apa yang mana tidak,
tapi ketika saya melakukannya seperti ini, kemudian tancapkan bahwa daftar nama path
di tempat ini seluruh ekspresi backquote dan berjalan ls-l pada mereka.
Jenis nyaman, ya?
Jadi itu satu hal yang rapi. Begitulah backquotes bekerja.
Sekarang mari kita turun sedikit lebih jauh.
Ini adalah alias. Saya benar-benar menggunakan ini.
Saya akan mencoba untuk mendapatkan ini dengan 1 operasi editing.
Oke.
Sekarang mari kita lihat bagaimana definisi tersebut keluar.
alias LWH menceritakan bagaimana hal itu didefinisikan.
Perhatikan itu hanya ini, tapi tanda kutip luar telah diambil off
dan tanda seru diambil off.
! *, Daftar lengkap dari semua argumen.
Dalam definisi alias itu akan berlaku kembali ke tempat saya menggunakan ini.
LWH ksh bash. Oke.
Lihat bagaimana yang bekerja? Ini menghemat saya beberapa mengetik.
Mari kita naik sedikit hanya untuk menyebutkan sesuatu yang lain di sini.
Perhatikan di sini ini kerang yang berbeda. Aku seharusnya disebutkan ini sebelumnya.
Csh memiliki 2 di sini dan begitu juga / bin / tcsh.
Kita bisa membangun dengan cara lain bahwa mereka sebenarnya file yang sama.
Ingat saya katakan jika Anda mengetik sh Anda mendapatkan bash.
Ketik ini dan Anda mendapatkan ini.
Tetapi mereka tidak terkait. Mereka memiliki orang-orang tunggal di sana.
Dan ini bukan jenis file yang dapat memanggil satu sama lain.
Jadi mereka adalah file terpisah, yang C-shell adalah file yang sama.
Kembali di sini, yang lain di sini, alias ini,
perhatikan yang menjalankan perintah ini, berkas.
Alias ​​yang berjalan itu. File memberitahu Anda jenis file.
Jadi FWH pesta ksh. Oke.
Itulah output dari perintah berkas.
Saya tidak tahu apakah Anda tahu apa artinya ini di sini,
Mach-O biner universal dengan 2 arsitektur.
Ada 2 jenis prosesor mungkin dalam Mac,
dan beberapa program ditulis untuk dapat berjalan dengan baik,
dan perintah file yang dapat menentukan itu, jadi itulah apa artinya ini.
Kedua file ini ditulis dengan cara itu.
Jadi kita melihat bagaimana alias bekerja, kita melihat bagaimana backquote bekerja,
kita melihat bagaimana ls file yang sebenarnya atau file bekerja.
Ini mungkin tidak bekerja. Coba "di mana mana" dan "LWH mana". Oke, mari kita coba itu.
di mana mana.
di mana adalah shell built-in.
Ingat sebelumnya kita menunjukkan bahwa Bash tidak memiliki mana.
Jika Anda mengetik di mana di Bash shell, Anda mendapatkan pesan error.
Itu hanya bagian dari shell bukannya perintah terpisah.
Apa yang terjadi jika saya ketik LWH mencari di mana? Lihat apa yang terjadi di sana.
Ran di mana mana, mendapat output ini, dan kemudian mencoba untuk menjalankan ls
sebagai l pada di mana adalah shell built-in.
mana ada, tapi yang lain tidak ada.
Tak satu pun dari ini ada, sebenarnya.
Sehingga tidak selalu bekerja, dan juga menggambarkan bagaimana beberapa hal
tidak melakukan cukup apa yang Anda mungkin berpikir.
Mari kita turun sedikit lebih jauh di sini.
Ini di sini adalah dalam Bash. Itu juga perintah substitusi seperti backquote tersebut.
Tapi tidak seperti backquote, menggunakan gaya variabel ini.
Ada beberapa ekspresi yang dimulai dengan tanda dolar,
dan sementara ini tidak variabel, mereka meminjam penggunaan tanda dollar
untuk menunjukkan ekspresi dari beberapa jenis.
Itu bisa dikelilingi dengan tanda kurung atau tanda kurung atau tanda kurung ganda,
yang memiliki tujuan yang berbeda.
Kurung tunggal di sini adalah substitusi perintah seperti backquotes.
Kurung ganda sebenarnya merupakan operasi aritmatika.
Ada sintaks lain, operasi lainnya.
Sintaks backquote tersedia dalam Bash.
Namun, yang satu ini adalah lebih baik. Ini jauh lebih mudah untuk membaca dan memungkinkan bersarang.
Anda dapat memiliki di dalam $ (command) perintah lain,
sesuatu seperti -
Saya mendapatkan daftar di sana.
Itu akan bekerja jika saya punya backquote juga.
Bagaimana jika saya ingin melakukan sesuatu seperti -
Anda mungkin tidak akan benar-benar menggunakan perintah ini,
tetapi substitusi perintah internal ini menggemakan nama semua file yang dimulai dengan,
maka yang satu ini berjalan ls-l pada file-file,
dan kemudian yang satu ini hanya gema output.
Anda mungkin tidak akan melakukan ini, Anda hanya akan melakukan gema atau ls,
tapi ini menggambarkan bagaimana bersarang perintah bekerja.
Jadi hanya fitur lain di sini.
Saya sebutkan ini sebelumnya, bahwa ketika Anda memiliki tempat di C-shell,
ketik bekerja pada kulit Bourne-type untuk mencari perintah.
Built-in perintah, hanya apa yang saya katakan di sana.
Perintah merupakan bagian dari shell, seperti di mana.
Ketika shell mengeksekusi perintah seperti ls, ini menempatkan melalui jalan,
menemukannya dalam beberapa direktori di suatu tempat,
membaca bahwa ke dalam memori, menciptakan shell baru,
membaca perintah ls atau apa pun ke shell
dimana variabel lingkungan sudah berada,
dan kemudian transfer eksekusi untuk itu.
Built-in command, kode perintah yang ada di dalam shell,
sehingga shell hanya mulai mengeksekusi bagian dari kode sendiri.
dimana perintah tersebut. Ini benar-benar mendapatkan lebih cepat.
Tidak perlu membaca apa pun di memori, itu sudah di memori.
Built-in perintah selalu lebih diutamakan daripada perintah dengan nama yang sama.
Perintah yang ada di direktori di jalan mungkin memiliki nama yang sama,
perintah dalam direktori yang berbeda, file dalam direktori yang berbeda.
Salah satu yang terjadi sebelumnya di jalan adalah salah satu yang akan mendapatkan.
Jika ada perintah built-in, Anda selalu mendapatkannya.
Tidak ada cara untuk memberikan prioritas lebih rendah dari perintah di jalan.
Jika Anda ingin mendapatkan perintah jalan, Anda dapat mengetik nama path penuh.
Jika ada perintah mana di jalan di suatu tempat,
Anda bisa mengetik / bin / di mana dan Anda akan mendapatkannya.
Jika Anda tidak ingin mengetikkan seluruh pathname, Anda bisa mendefinisikan sebuah alias.
Bahkan, jika Anda memberi alias nama yang sama dengan perintah built-in, itu akan berhasil
karena definisi alias dievaluasi
sebelum shell menentukan bahwa itu adalah built-in perintah yang harus dieksekusi.
Maka ini menjadi sedikit lebih rumit dengan beberapa perintah di sini.
Kasus beberapa perintah yang benar-benar built-in perintah dan di jalan.
Salah satunya adalah gema, perintah saya hanya menggunakan beberapa waktu yang lalu dalam contoh-contoh.
Echo adalah perintah di jalan dan di setiap shell.
Mereka tidak tentu semua berperilaku dengan cara yang sama.
Itu awalnya perintah hanya di jalan.
Itu dibangun untuk kerang kemudian.
Karena ada pilihan yang tergantung pada lingkungan
dan opsi baris perintah, perintah built-in
ditulis berfungsi sama dengan perintah yang telah di jalan,
itu tidak mungkin mereka akan telah ditulis seperti itu
jika perintah itu tidak sudah ditulis untuk jalan.
Jadi ini memiliki efek samping. Sejarahnya memiliki efek di sini.
Ada pilihan di sana.
Ada juga pilihan didefinisikan oleh variabel dalam tcsh disebut echo_style.
Itu salah satu dari variabel-variabel ini yang dapat mengubah cara yang echo bekerja.
Ada kasus lain di mana Anda dapat menetapkan variabel
yang mengubah cara bahwa operasi shell, termasuk perintah built-in, bekerja.
Ini tidak akan mempengaruhi apa-apa lagi
karena perintah lain tidak memiliki akses ke variabel shell,
hanya variabel lingkungan.
Tapi operasi shell dapat membaca variabel shell.
Itu tidak akan bekerja untuk csh. Itu hanya tcsh. Itulah salah satu perangkat tambahan.
Parsing memiliki urutan ketika mengevaluasi metakarakter,
ketika mengevaluasi variabel, alias, sejarah referensi.
Ada urutan tertentu untuk hal-hal ini.
Jika melakukan hal-hal dalam urutan tertentu
dan sampai ke sesuatu yang merupakan ekspresi semacam sebuah
yang telah dievaluasi, itu tidak akan mengevaluasi lagi.
Jika mendapatkannya, maka hanya akan lulus pada karakter.
Jadi, jika evaluasi beberapa ekspresi seperti substitusi perintah
atau variabel atau apa pun menimbulkan ekspresi
yang akan Anda ingin dievaluasi,
yang akan bekerja hanya jika evaluasi yang terjadi kemudian dalam urutan.
Saya harap saya menjadi jelas di sana.
Itu urutan parsing, operasi di C-shell,
tidak sama untuk built-in perintah seperti itu untuk non-built-in perintah.
Saya tidak yakin tentang Bash sana.
Sebagai contoh, jika sebuah variabel shell menghasilkan referensi sejarah,
mungkin tidak akan kembali dalam sejarah.
Itu hanya akan mendapatkan tanda seru.
Bahkan, kita bisa mencoba yang keluar sekarang.
menetapkan = dan kita harus menempatkan ini dalam sana.
Oh, tunggu. Maaf. Saya melakukan ini di Bash. Saya ingin melakukannya di sini.
Lihat, sehingga tidak mengevaluasi bahwa referensi sejarah
karena itu sudah melewati titik mengevaluasi ekspresi sejarah
ketika dievaluasi variabel.
Jadi itulah 1 pengaruh parsing.
Dan lagi, built-in perintah tidak dilakukan dengan cara yang sama.
Baik. Mari kita pergi ke yang berikutnya di sini.
Hal ini dimaksudkan untuk menjadi 1 garis, tapi itu membuatnya lebih mudah untuk dibaca.
Apa artinya itu lakukan?
Anda mungkin ingat bahwa kita dapat mengevaluasi tanda bintang sebagai wildcard nama file,
dan ada wildcard nama file lain seperti tanda tanya dan ekspresi braket.
Semacam itu evaluasi disebut globbing.
mengatur noglob pada awal perintah ini mengatakan jangan lakukan itu.
noglob unset mengatakan kembali untuk melakukan hal itu.
Perhatikan bahwa set glob tidak akan memiliki efek tersebut.
Dalam bahasa biasa, mengatur gumpal atau noglob unset tampaknya akan menjadi setara,
tapi di sini tidak. Ini noglob diset.
Sekarang uji di. uji di berdiri untuk set terminal.
Ini tidak digunakan yang sering sekarang, tapi sebelum sistem windowing menjadi tersedia
dan Anda memiliki terminal tunggal, Anda mungkin harus menentukan jenis.
Dan jika ada sesuatu yang datang melalui Ethernet atau dari jaringan,
Anda mungkin ingin mengatakan itu vt100 a.
VT100 adalah jenis standar dalam bisnis terminal. Ini berasal dari terminal Desember.
Jika Anda hanya melakukan dialup - melihat bahwa? Ini kembali cara, ya?
Jadi, jika kita hanya uji di atas sini,
jika saya hanya melakukan uji di, itu ulang terminal saya, tapi Anda tidak melihat apa-apa.
Itu tidak benar-benar mengubah apa pun.
-S
Oke.
JANGKA setenv xterm-color.
Kita sudah tahu bahwa istilah itu ditetapkan seperti itu, sehingga tidak berubah.
Itulah cara kita ingin melakukannya.
Tetapi perhatikan bahwa perintah, uji di-s, hanya output ini perintah ini. Itu tidak menjalankannya.
Itu tidak menjalankan perintah-perintah ini, melainkan output mereka.
Jadi ini dimaksudkan untuk menghasilkan perintah yang kemudian akan dijalankan.
Anda ingat perintah dalam file yang saya hanya menunjukkan Anda memiliki Q di dalamnya.
Jadi mari kita lakukan itu.
The Q menekan beberapa output, tapi itu tidak masalah di sini, seperti yang Anda lihat.
Aku hanya melakukan itu untuk menunjukkan bahwa itu tidak masalah.
Hal ini sintaks backquote.
Catatan backquote di sini, backquote sini.
Aku mengabaikan hal-hal ini di sini.
Ini adalah kasus memberitahu apa yang harus dilakukan
dalam kasus jenis tertentu terminal -
Ethernet, jaringan, dialup, apa yang telah Anda.
Tidak peduli di sini karena kita tidak benar-benar melakukan hal-hal itu.
Aku hanya menggambarkan perintah.
Jika saya melakukan ini dengan backquote, apa yang akan saya dapatkan?
Juga perhatikan di sini bahwa ini termasuk noglob set dan noglob diset,
sehingga mereka sekarang redundan dalam definisi.
Itu tidak selalu benar, tapi sekarang mereka termasuk dalam perintah ini.
Tapi mari kita lihat apa yang terjadi jika saya melakukan itu
dan pergi ke awal baris dengan Control A dan aku melakukan itu.
Oke, set: Perintah tidak ditemukan. Itu agak aneh, bukan?
set adalah perintah terkenal. Ini bagian dari shell.
set: Perintah tidak ditemukan? Mengapa demikian?
Hmm. Nah, mari kita berpikir tentang hal ini.
Ini menjalankan perintah substitusi backquote,
dan yang terjadi pada bagian tertentu dari urutan parsing perintah.
set adalah perintah built-in.
Jadi pada saat itu tidak bahwa substitusi perintah,
itu sudah berhasil melewati titik mengidentifikasi built-in perintah.
Jadi memperlakukan diatur seolah-olah perintah di jalan.
Tak perlu dikatakan, itu tidak menemukannya dan Anda mendapatkan pesan kesalahan.
Yah. Ada contoh urutan parsing.
Dan apa yang kita lakukan tentang hal itu?
Perhatikan perintah yang sangat menarik ini di sini, eval.
Aku ingin tahu apa yang tidak.
Jika Anda melihat manual - dan mari kita hanya melakukan itu
untuk menunjukkan bagaimana membingungkan manual ini -
man tcsh, panduan bingung, menemukan hal-hal di sini tidak mudah baik.
Di sini kita pergi, eval arg, sehingga kami dapat memiliki 1 atau lebih argumen
dan ada daftar hal-hal di sana.
Memperlakukan argumen sebagai masukan untuk shell
dan mengeksekusi perintah yang dihasilkan dalam konteks shell saat ini.
Hal ini biasanya digunakan untuk menjalankan perintah yang dihasilkan sebagai hasil dari perintah
atau substitusi variabel karena parsing terjadi sebelum penggantian ini.
Sangat bagus.
Dan di sini mereka bahkan menyebut perintah uji di untuk penggunaan sampel
seperti saya hanya menunjukkan Anda.
Sekarang aku harus mendapatkan jendela kembali ke tempat yang berguna.
Mari kita di sini dan kita akan melihat eval yang digunakan sebelum itu.
Jadi mari kita lihat apa yang terjadi jika kita menempatkan - di sini kita pergi dengan tanda panah untuk perintah yang
dan Pengendalian A ke awal, eval.
Oke, sehingga bekerja.
Ketika Anda melakukan eval, dibutuhkan apa yang terjadi setelah itu dan membuat perintah.
Hal ini memungkinkan Anda untuk dasarnya mengurai dua kali.
Bagian di sini menjalankan perintah ini dalam backquotes,
mendapatkan output.
Output seharusnya dijalankan sebagai perintah-perintah seperti ini di sini
pada satu ini dan yang satu ini.
Jadi perintah-perintah tersebut sekarang di sini dalam urutan ini,
tetapi ini built-in perintah dan tidak bisa mendapatkan mereka segera.
Jadi kita pergi ke eval, eval mengambil bahwa sampai, mulai semuanya dari awal lagi, dan bekerja.
Contoh kedua backquoting, eval, parsing, konsekuensi parsing,
dan perintah yang mungkin sangat sedikit berguna bagi Anda saat ini.
Oke. Baiklah, umask.
Mari kita lihat perintah ini di sini, unmask 022. Aku ingin tahu apa yang tidak.
Mari kita ketik umask dengan apa-apa setelah itu. 22. Oke.
022 dan melakukannya lagi.
Seperti yang sudah bisa anda duga, umask tanpa argumen memberitahu Anda topeng saat ini;
unmask dengan argumen membuat itu, tapi itu yang saya sudah punya.
Apa artinya 022?
Ini adalah di sini perlindungan untuk file.
Mereka menentukan siapa yang diizinkan untuk membaca atau menulis atau mengeksekusi file.
Perlindungan juga disebut izin.
R singkatan baca, w untuk write,
dan x, yang tidak hadir di sana, singkatan mengeksekusi.
Ada 3 kategori di sana.
3 elemen terakhir adalah dalam kategori pengguna. Mereka berlaku untuk saya, pengguna.
Ini 3 di sini berlaku untuk kelompok.
File milik kelompok 1, pengguna mungkin milik beberapa kelompok,
tetapi jika pengguna berada dalam kelompok yang file ini milik,
maka perlindungan ini akan berlaku untuk dia jika dia bukan pengguna.
Dan yang satu ini adalah orang lain.
Kategori-kategori ini saling eksklusif.
Perlindungan pengguna berlaku baginya,
perlindungan kelompok berlaku untuk anggota kelompok selain pengguna,
dan perlindungan lain hanya berlaku untuk orang-orang selain pengguna dan anggota kelompok.
Jika ada r atau aw atau x, itu berarti bahwa perlindungan yang diberikan.
Jika ada tanda hubung, itu berarti tidak.
Sebenarnya ada hal lain yang dapat diletakkan di sini selain ini,
yang saya tidak akan masuk ke sekarang.
Umask mendefinisikan default untuk file yang Anda buat.
Dan sebagai masker, pada dasarnya ia mengatakan bit yang Anda tidak menetapkan.
Bagaimana ini menjadi bit?
Jika Anda berpikir dari masing-masing sebagai bilangan oktal,
ini adalah bit 1s, ini adalah 2s, ini adalah 4s.
Jadi 0 sampai 7
akan menjelaskan apa kombinasi r, w, dan x yang Anda miliki untuk 3 tersebut
dan kemudian jumlah yang sama untuk ini dan kemudian untuk ini.
Jadi 022 berarti 0 untuk lainnya, 2 untuk kelompok, 2 bagi pengguna.
Tapi ini adalah masker. Mask adalah apa yang Anda tidak memiliki.
Maafkan aku. Saya hanya memberikan Anda hal-hal dalam urutan yang salah.
Ini adalah pertama 3. 3 Ini adalah pengguna, 3 ini adalah kelompok, 3 ini adalah yang lain.
Maaf saya memberi Anda ini dalam urutan yang salah.
0, yang merupakan pertama dari mereka, tidak menampilkan nilai,
tetapi jika nomor tidak ada, itu adalah 0.
Itu berarti semua 3 dari ini akan diizinkan.
Perhatikan bahwa dalam satu ini x tidak diperbolehkan.
Alasannya adalah bahwa shell yang mampu menentukan
apakah file harus dijalankan atau tidak.
Karena ini bukan merupakan file executable, itu tidak mengatur x.
2 berarti yang menulis izin, kategori kedua di sini,
satu di tengah, ditolak.
Jadi sekali lagi, ini adalah hal yang ditolak.
Nah, x diperbolehkan tapi tidak di sini karena itu tidak dapat dieksekusi
dan juga untuk orang lain.
Jadi itu adalah umask umum.
Yang umum lainnya adalah 700 - memberikan diri segala sesuatu dan tidak ada orang lain apa-apa.
Dan ada kemungkinan lain.
Aku akan kembali ke itu. Menggunakan sejarah saya dapat mencari kembali untuk itu, LWH ke sana.
Oke. Jadi di sini, ini adalah kerang.
Bash, pemilik yang akun sistem, dapat melakukan segalanya.
Kelompok dan orang lain dapat melakukan membaca atau mengeksekusi tapi tidak menulis.
Yang satu ini bahkan tidak memungkinkan pemiliknya untuk menulis untuk itu.
Jika pemilik ingin menulis untuk itu, account sistem,
ia harus mengubah perlindungan pertama.
Tapi sekali lagi, umask set default dengan menutupi itu,
dengan menunjukkan bit yang tidak akan ditetapkan.
Hal ini biasanya di salah satu file inisialisasi Anda, yang merupakan cshrc untuk C-shell.
atau profil untuk kerang Bourne-type..
Hal ini dapat di tempat lain juga jika ada file inisialisasi lain pada sistem.
Lagi pula, itu umask.
Ada sesuatu yang agak aneh di sini,
dan itu adalah, mengapa ada satu perintah untuk ini?
Jika saya sedang menulis ini, saya akan membuat sebuah variabel, umask = beberapa nilai.
Mengapa ada perintah keseluruhan hanya untuk tujuan ini?
Alasannya adalah ini hanya akan kembali ke asal-usul Unix.
Unix itu hanya beberapa proyek pemrograman di Bell Labs pada awal tahun 1970.
Orang-orang hanya berkumpul program.
Mereka tidak pernah dimaksudkan untuk menjadi sistem operasi di seluruh dunia.
Orang yang berbeda menulis bagian yang berbeda tanpa berpikir sangat banyak
bagaimana mereka akan digunakan - agak samar.
Dan itu datang bersama-sama seperti itu, dan itu masih seperti itu dalam beberapa hal.
Jadi yang mencerminkan sejarah, dan masih ada inkonsistensi tersebut dan elemen aneh itu.
Oke. Berikutnya satu di sini.
Seperti yang saya tulis sebelumnya, C-shell tidak benar-benar digunakan sangat banyak untuk pemrograman,
meskipun bisa.
Dijalankan lebih lambat, lagi trade-off antara penggunaan interaktif,
yang memiliki lebih pengolahan terlibat daripada kecepatan,
yang dapat melakukannya tanpa pengolahan.
Fitur tambahan ditambahkan ke shell Bourne oleh Korn dan Bourne-lagi kerang
tampaknya tidak memperlambat mereka, dan saya tidak tahu mengapa itu.
Ini mungkin saja pemrograman yang lebih baik, tapi aku tidak dalam posisi untuk tahu.
Kecepatan di sini sebenarnya bukan masalah besar, meskipun disebutkan.
Alasannya adalah bahwa script shell benar-benar mendapatkan cukup cepat.
Jika ada banyak perintah seperti dalam program kalkulasional
Anda mungkin tidak akan melakukannya dalam shell script.
Operasi ada cukup sederhana dan mudah.
Orang-orang yang saya alami yang terlalu lambat
melibatkan aplikasi berulang-ulang perintah lambat.
Sebelumnya saya sebutkan editor aliran sed. Perintah yang lambat.
Jika Anda menjalankan sed berkali-kali, Anda akan mendapatkan script yang lambat, tapi itu bukan shell yang lambat.
Menjalankan dalam Bourne shell tidak akan jauh lebih cepat daripada menjalankannya di C-shell,
meskipun ada mungkin beberapa keuntungan di sana.
Kemampuan pemrograman tambahan, di sisi lain,
adalah alasan penting mengapa Anda akan menggunakan kerang Bourne-type.
C-shell memiliki fitur aneh itu -
kenyataan bahwa Anda tidak tahu apakah variabel adalah variabel shell atau variabel lingkungan.
Hal ini dapat sangat membingungkan.
Ini tidak begitu mudah untuk menulis
hanya berdasarkan pengalaman Anda pemrograman dalam bahasa lain.
Saya pikir Anda mungkin menemukan kerang Bourne-jenis yang lebih konsisten dengan pengalaman Anda.
Beberapa script, meskipun, bisa ribuan baris panjang.
Mereka yang pernah saya lihat adalah digunakan untuk menambal sistem operasi.
Mereka dapat mengeksekusi sangat lambat, tetapi Anda tidak menjalankan mereka sangat sering.
Hanya ketika Anda melakukan patching,
dan itu hanya manajer sistem yang melakukan hal-hal,
sehingga tidak benar-benar banyak masalah.
Mereka yang ratusan garis panjang benar-benar melaksanakan cukup cepat.
Menyebutkan ini di sini, apa perangkat tersebut?
Saya telah menyebutkan beberapa dari mereka - array, perhitungan,
yang $ () ekspresi untuk perhitungan di Bash shell,
jenis lain dari substitusi perintah.
Ada berbagai jenis perintah pengujian
dengan mana Anda dapat melakukan tes tergantung pada keberadaan file atau hal-hal lain.
Terakhir di sini, perintah ini di sini.
Apa yang dilakukan ini, dan mengapa ada orang yang menggunakannya?
variableName printenv.
Kami tahu apa yang printenv tidak. Ini memberitahu kita nilai dari variabel.
Dan variableName printenv tidak akan memberitahu kita sangat banyak karena tidak ada variabel tersebut.
Kosong.
Tapi mari kita memberikan sesuatu yang berarti.
Itu tidak ada di sana. Oke. Kurasa aku tidak pernah didefinisikan itu.
Mari kita memeriksa lingkungan saya.
Ini adalah perintah lain dengan mana Anda dapat memeriksa lingkungan Anda.
Ada EDITOR tua yang baik, yang kita lihat sebelumnya.
Apa artinya itu lakukan?
Di sini kita memiliki ekspresi backquote.
Ingat ini adalah C-shell.
Jadi EDITOR printenv akan memberi kita nilai EDITOR. Ini vi.
Dan kemudian akan menetapkan nilai bahwa untuk variabel, perintah set.
Jadi sekarang jika saya lakukan echo $, saya mendapatkan vi.
Itu tampaknya tidak terlalu berguna.
Namun, yang sebenarnya memiliki tujuan.
Karena kita tidak tahu apakah suatu variabel adalah variabel shell atau variabel lingkungan
dengan menggunakan sintaks evaluasi tanda dolar, kita bisa menggunakan printenv
untuk memastikan bahwa itu adalah variabel lingkungan.
Jadi, jika ada shell variabel editor ini tidak akan mendapatkan itu.
Ini bekerja hanya dengan variabel lingkungan.
Jika ada variabel shell dan saya ingin nilainya,
Aku harus mencari cara lain untuk melakukannya.
Salah satu cara untuk melakukan itu akan dengan melakukan set dan pipa.
Ini adalah salah satu metakarakter, karakter khusus.
Ia mengirimkan output dari set ke sesuatu yang lain.
Mari kita lihat apa yang kita temukan di sana.
Tidak ada. Oke. Mari kita lihat apa yang ada di sana bersama-sama.
Itu echo_style, yang saya sebutkan sebelumnya. Oke, mari kita lakukan itu.
Ingat saya sebutkan sebelumnya, echo_style
menentukan cara perintah echo akan berjalan.
bsd singkatan dari Berkeley Standard Distribution.
Ini adalah Unix Berkeley dari tahun 1970-an.
Itulah salah satu cara yang echo dapat berjalan.
Mengatur echo_style nilai yang di TC-shell akan menyebabkan gema untuk berperilaku seperti itu.
Jadi mengatur melakukan itu, tapi set hanya mendapat variabel shell.
Ini tidak akan menemukan EDITOR, yang bukan merupakan variabel shell.
Tidak ada.
Jadi itu salah satu cara untuk membedakan mereka.
Tapi fakta bahwa Anda harus pergi melalui beberapa perintah yang aneh seperti itu
untuk membedakan antara variabel shell atau variabel lingkungan
menunjukkan jenis sifat praktis dari C-shell untuk beberapa tujuan.
Dan sekarang, terakhir dan mungkin paling tidak, ini adalah halaman manual.
Bagi siapa Anda mungkin tahu, orang itu adalah perintah pendek untuk manual.
Halaman manual untuk kerang sulit untuk dibaca. Mereka sangat panjang.
Mereka terorganisir dalam cara yang dapat membuat sulit untuk menemukan apa yang Anda cari.
Jadi jika Anda sedang mencari sesuatu dengan tujuan,
Anda mungkin tidak tahu apakah tujuan itu adalah variabel shell atau sesuatu yang lain,
sehingga Anda mungkin tidak tahu di mana mencarinya.
Anda dapat mencari berbagai string, tapi string sering diulang.
Sehingga umumnya sulit untuk dibaca.
Kami hanya melihat halaman manual TC-shell sedikit sebelum menemukan perintah eval.
Beberapa hal lebih cepat.
Satu pendekatan adalah untuk mencari string.
Anda dapat menggunakan pager.
Pager memiliki garis miring untuk mencari perintah atau string dalam operasi pager.
Man secara default akan menggunakan pager, berupa LEBIH atau KURANG.
Saya tidak tahu jika Anda terbiasa dengan mereka, tetapi mereka dapat menampilkan file sedikit demi sedikit.
Saya telah menggunakan KURANG untuk menampilkan file-file tertentu yang kita punya di sini.
Anda dapat mencari di dalam sana.
Anda dapat mencoba menggunakan string pencarian yang berbeda.
Juga halaman manual dalam sistem operasi yang berbeda mungkin tidak sama.
Mereka bisa menjadi halaman terpisah untuk csh dan tcsh.
Mereka tidak berada pada Mac, tetapi mereka mungkin jika mereka adalah perintah yang terpisah.
Jika sh tidak benar-benar memanggil Bash, mungkin akan ada halaman manual yang terpisah.
Beberapa sistem memiliki halaman manual yang terpisah hanya untuk C-shell built-in perintah.
Kadang-kadang jika Anda ingin membaca deskripsi perintah built-in
itu juga di jalan, seperti echo, Anda perlu membaca halaman manual pada itu perintah pada gema
untuk menentukan bagaimana ia akan bekerja sebagai perintah built-in
bahkan jika Anda tidak memanggil perintah built-in.
Itu kelemahan dari sistem operasi pada umumnya, tidak hanya untuk kerang,
meskipun untuk kerang khususnya halaman manual yang cukup lama,
sebagian karena mereka telah menambahkan fitur yang berguna untuk mereka, yang mungkin menjadi positif.
Oke. Apakah ada pertanyaan? Setiap topik yang Anda ingin membawa up?
Sesuatu yang relevan di sini?
Nah, sudah sangat bagus berbicara dengan Anda semua.
Saya harap Anda punya sesuatu dari seminar ini
yang akan berguna bagi Anda di masa depan usaha Anda.
[CS50.TV]