Unix / Linux - Pengalihan Input / Output Shell

Dalam bab ini, kita akan membahas secara rinci tentang pengalihan input / output Shell. Kebanyakan perintah sistem Unix mengambil masukan dari terminal Anda dan mengirimkan keluaran yang dihasilkan kembali ke terminal Anda. Sebuah perintah biasanya membaca inputnya dari input standar, yang secara default merupakan terminal Anda. Demikian pula, perintah biasanya menulis outputnya ke output standar, yang juga merupakan terminal Anda secara default.

Pengalihan Output

Output dari perintah yang biasanya ditujukan untuk output standar dapat dengan mudah dialihkan ke file. Kemampuan ini dikenal sebagai pengalihan keluaran.

Jika notasi> file ditambahkan ke perintah apa pun yang biasanya menulis outputnya ke output standar, output dari perintah itu akan ditulis ke file alih-alih terminal Anda.

Periksa berikut ini who perintah yang mengarahkan kembali keluaran lengkap dari perintah di file pengguna.

$ who > users

Perhatikan bahwa tidak ada keluaran yang muncul di terminal. Ini karena output telah dialihkan dari perangkat output standar default (terminal) ke file yang ditentukan. Anda dapat memeriksa file pengguna untuk konten lengkap -

$ cat users
oko         tty01   Sep 12 07:30
ai          tty15   Sep 12 13:32
ruth        tty21   Sep 12 10:10
pat         tty24   Sep 12 13:07
steve       tty25   Sep 12 13:03
$

Jika sebuah perintah memiliki keluarannya dialihkan ke sebuah file dan file tersebut sudah berisi beberapa data, data itu akan hilang. Perhatikan contoh berikut -

$ echo line 1 > users
$ cat users
line 1
$

Anda dapat menggunakan >> operator untuk menambahkan keluaran dalam file yang sudah ada sebagai berikut -

$ echo line 2 >> users
$ cat users
line 1
line 2
$

Pengalihan Input

Seperti halnya keluaran dari sebuah perintah dapat diarahkan ke sebuah file, demikian pula masukan dari sebuah perintah dapat dialihkan dari sebuah file. Sebagaigreater-than character > digunakan untuk pengalihan keluaran, file less-than character < digunakan untuk mengarahkan input dari sebuah perintah.

Perintah yang biasanya mengambil masukannya dari masukan standar dapat dialihkan masukannya dari file dengan cara ini. Misalnya, untuk menghitung jumlah baris dalam file yang dibuat pengguna di atas, Anda dapat menjalankan perintah sebagai berikut -

$ wc -l users
2 users
$

Setelah dieksekusi, Anda akan menerima keluaran berikut. Anda dapat menghitung jumlah baris dalam file dengan mengarahkan input standar filewcperintah dari pengguna file -

$ wc -l < users
2
$

Perhatikan bahwa ada perbedaan dalam keluaran yang dihasilkan oleh dua bentuk perintah wc. Dalam kasus pertama, nama pengguna file terdaftar dengan jumlah baris; dalam kasus kedua, tidak.

Dalam kasus pertama, wc mengetahui bahwa ia membaca inputnya dari pengguna file. Dalam kasus kedua, ia hanya mengetahui bahwa ia membaca masukannya dari masukan standar sehingga ia tidak menampilkan nama file.

Berikut Dokumen

SEBUAH here document digunakan untuk mengarahkan input ke skrip atau program shell interaktif.

Kita dapat menjalankan program interaktif dalam skrip shell tanpa tindakan pengguna dengan menyediakan input yang diperlukan untuk program interaktif, atau skrip shell interaktif.

Bentuk umum untuk a here dokumen adalah -

command << delimiter
document
delimiter

Di sini shell mengartikan file <<operator sebagai instruksi untuk membaca input sampai menemukan baris yang berisi pembatas yang ditentukan. Semua baris masukan hingga baris yang berisi pembatas kemudian dimasukkan ke dalam masukan standar dari perintah.

Pembatas memberi tahu shell bahwa file heredokumen telah selesai. Tanpanya, shell terus membaca input selamanya. Pemisah harus berupa satu kata yang tidak mengandung spasi atau tab.

Berikut adalah masukan untuk perintah tersebut wc -l untuk menghitung jumlah baris -

$wc -l << EOF
   This is a simple lookup program 
	for good (and bad) restaurants
	in Cape Town.
EOF
3
$

Anda bisa menggunakan here document untuk mencetak banyak baris menggunakan skrip Anda sebagai berikut -

#!/bin/sh

cat << EOF
This is a simple lookup program 
for good (and bad) restaurants
in Cape Town.
EOF

Setelah eksekusi, Anda akan menerima hasil berikut -

This is a simple lookup program
for good (and bad) restaurants
in Cape Town.

Skrip berikut menjalankan sesi dengan vi editor teks dan menyimpan masukan dalam file test.txt.

#!/bin/sh

filename=test.txt
vi $filename <<EndOfCommands
i
This file was created automatically from
a shell script
^[
ZZ
EndOfCommands

Jika Anda menjalankan skrip ini dengan vim bertindak sebagai vi, kemungkinan besar Anda akan melihat output seperti berikut -

$ sh test.sh
Vim: Warning: Input is not from a terminal
$

Setelah menjalankan skrip, Anda akan melihat yang berikut ditambahkan ke file test.txt -

$ cat test.txt
This file was created automatically from
a shell script
$

Buang hasilnya

Terkadang Anda perlu menjalankan perintah, tetapi Anda tidak ingin hasilnya ditampilkan di layar. Dalam kasus seperti itu, Anda dapat membuang keluaran dengan mengarahkannya ke file/dev/null -

$ command > /dev/null

Berikut perintah adalah nama dari perintah yang ingin Anda jalankan. Berkas/dev/null adalah file khusus yang secara otomatis membuang semua inputnya.

Untuk membuang keluaran perintah dan keluaran kesalahannya, gunakan pengalihan standar untuk mengalihkan STDERR untuk STDOUT -

$ command > /dev/null 2>&1

Sini 2 mewakili STDERR dan 1 mewakili STDOUT. Anda dapat menampilkan pesan ke STDERR dengan mengarahkan STDOUT ke STDERR sebagai berikut -

$ echo message 1>&2

Perintah Pengalihan

Berikut ini adalah daftar lengkap perintah yang dapat Anda gunakan untuk pengalihan -

Sr.No. Perintah & Deskripsi
1

pgm > file

Output dari pgm diarahkan ke file

2

pgm < file

Program pgm membaca masukannya dari file

3

pgm >> file

Output dari pgm ditambahkan ke file

4

n > file

Keluaran dari aliran dengan deskriptor n diarahkan ke file

5

n >> file

Keluaran dari aliran dengan deskriptor n ditambahkan ke file

6

n >& m

Menggabungkan keluaran dari aliran n dengan aliran m

7

n <& m

Menggabungkan masukan dari aliran n dengan aliran m

8

<< tag

Input standar berasal dari sini melalui tag berikutnya di awal baris

9

|

Mengambil keluaran dari satu program, atau proses, dan mengirimkannya ke program lain

Perhatikan bahwa deskriptor file 0 biasanya input standar (STDIN), 1 adalah keluaran standar (STDOUT), dan 2 adalah keluaran kesalahan standar (STDERR).