Ubah hala input/output shell
Kebanyakan perintah sistem UNIX menerima input daripada terminal anda dan menghantar output yang terhasil kembali ke terminal anda. Perintah biasanya membaca input dari tempat yang dipanggil input standard, yang kebetulan terminal anda secara lalai. Begitu juga, arahan biasanya menulis outputnya kepada output standard, yang juga terminal anda secara lalai.
Senarai arahan ubah hala adalah seperti berikut:
命令 | 说明 |
---|---|
command > file | 将输出重定向到 file。 |
command < file | 将输入重定向到 file。 |
command >> file | 将输出以追加的方式重定向到 file。 |
n > file | 将文件描述符为 n 的文件重定向到 file。 |
n >> file | 将文件描述符为 n 的文件以追加的方式重定向到 file。 |
n >& m | 将输出文件 m 和 n 合并。 |
n <& m | 将输入文件 m 和 n 合并。 |
<< tag | 将开始标记 tag 和结束标记 tag 之间的内容作为输入。 |
Perlu diambil perhatian bahawa deskriptor fail 0 biasanya adalah input standard (STDIN), 1 ialah output standard (STDOUT), dan 2 ialah output ralat standard (STDERR).
Ubah hala keluaran
Ubah hala biasanya dicapai dengan memasukkan simbol khusus antara arahan. Khususnya, sintaks simbol ini adalah seperti berikut:
command1 > file1
Arahan di atas melaksanakan perintah1 dan kemudian menyimpan kandungan output dalam fail1.
Perhatikan bahawa mana-mana kandungan sedia ada dalam fail1 akan digantikan dengan kandungan baharu. Jika anda ingin menambah kandungan baharu pada penghujung fail, gunakan operator >>
Instance
Laksanakan arahan who berikut, yang akan mengubah hala keluaran lengkap arahan dalam fail pengguna (pengguna):
$ who > users
Selepas pelaksanaan, tiada terminal Maklumat output kerana output telah diubah hala dari peranti output standard lalai (terminal) ke fail yang ditentukan.
Anda boleh menggunakan arahan kucing untuk melihat kandungan fail:
$ cat users _mbsetupuser console Oct 31 17:35 tianqixin console Oct 31 17:35 tianqixin ttys000 Dec 1 11:33
Alihan semula output akan menimpa kandungan fail, sila lihat contoh berikut:
$ echo "php中文网:www.php.cn" > users $ cat users php中文网:www.php.cn $
Jika anda tidak melakukannya mahu kandungan fail ditimpa , anda boleh menggunakan >> untuk menambah pada penghujung fail, contohnya:
$ echo "php中文网:www.php.cn" >> users $ cat users php中文网:www.php.cn php中文网:www.php.cn $
Pengubah hala input
Seperti pengalihan keluaran, Unix arahan juga boleh mendapatkan input daripada fail, sintaksnya ialah :
command1 < file1
Dengan cara ini, arahan yang pada asalnya memerlukan input daripada papan kekunci akan dipindahkan untuk membaca kandungan daripada fail.
Nota: Ubah hala keluaran lebih besar daripada tanda (>), ubah hala input kurang daripada tanda (<).
Contoh
Berikutan contoh di atas, kita perlu mengira bilangan baris dalam fail pengguna, laksanakan arahan berikut:
$ wc -l users 2 users
Anda juga boleh mengubah hala input ke fail pengguna:
$ wc -l < users 2
Nota: Keputusan dua contoh di atas adalah berbeza: contoh pertama akan mengeluarkan nama fail; yang kedua tidak akan, kerana ia hanya tahu membaca kandungan daripada input standard.
command1 < infile > outfile
Ganti input dan output pada masa yang sama, laksanakan arahan1, baca kandungan daripada fail dalam fail, dan kemudian tulis output ke fail luar.
Penjelasan mendalam tentang pengalihan
Secara amnya, tiga fail akan dibuka apabila setiap arahan Unix/Linux dijalankan:
Fail input standard (stdin): Deskriptor fail stdin ialah 0, dan program Unix membaca data daripada stdin secara lalai.
Fail output standard (stdout): Deskriptor fail stdout ialah 1. Program Unix mengeluarkan data ke stdout secara lalai.
Fail ralat standard (stderr): Deskriptor fail stderr ialah 2, dan program Unix akan menulis maklumat ralat ke aliran stderr.
Secara lalai, perintah > fail mengubah hala stdout ke fail dan perintah <
Jika anda mahu stderr dialihkan ke fail, anda boleh menulis seperti ini:
$ command 2 > file
Jika anda mahu stderr dilampirkan pada penghujung fail, anda boleh menulis seperti ini:
$ command 2 >> file
2 mewakili fail ralat standard (stderr).
Jika anda ingin menggabungkan stdout dan stderr dan mengubah halanya ke fail, anda boleh menulis seperti ini:
$ command > file 2>&1 或者 $ command >> file 2>&1
Jika anda ingin mengubah hala kedua-dua stdin dan stdout, anda boleh menulis seperti ini:
$ command < file1 >file2<🎜 Perintah >arahan mengubah hala stdin ke fail1 dan stdout ke fail2.
Here Document
Here Document ialah kaedah ubah hala khas dalam Shell, digunakan untuk mengubah hala input ke skrip atau program Shell interaktif.
Bentuk asasnya adalah seperti berikut:
command << delimiter document delimiter
Fungsinya adalah untuk menghantar kandungan (dokumen) antara dua pembatas sebagai input kepada arahan.
Nota:
Pembatas pada penghujung mesti ditulis dalam format atas. Tidak boleh ada sebarang aksara di hadapannya dan tidak boleh ada sebarang aksara di belakang, termasuk ruang dan inden tab.
Ruang sebelum dan selepas pembatas awal akan diabaikan.
Contoh
Kira bilangan baris Here Document melalui arahan wc -l pada baris arahan:
rreeeKita boleh juga gunakan Here Document digunakan dalam skrip, contohnya:
$ wc -l << EOF 欢迎来到 php中文网 www.php.cn EOF 3 # 输出结果为 3 行 $
Laksanakan skrip di atas dan hasil keluarannya ialah:
#!/bin/bash # author:php中文网 # url:www.php.cn cat << EOF 欢迎来到 php中文网 www.php.cn EOF
/dev/null File
Jika anda ingin melaksanakan arahan tertentu, Tetapi anda tidak mahu memaparkan hasil output pada skrin, maka anda boleh mengubah hala output ke /dev/null:
欢迎来到 php中文网 www.php.cn
/dev/null is a fail khas, dan kandungan yang ditulis kepadanya akan dibuang jika anda cuba membaca daripada fail ini, tiada apa yang akan dibaca. Walau bagaimanapun, fail /dev/null sangat berguna Mengalihkan output arahan kepadanya akan mempunyai kesan "melumpuhkan output".
Jika anda ingin menyekat stdout dan stderr, anda boleh menulis seperti ini:
$ command > /dev/null
Nota: 0 ialah input standard (STDIN), 1 ialah standard output (STDOUT), 2 ialah output ralat standard (STDERR).