Berapa banyak cara yang ada dalam total untuk memberi makan perintah dengan input?

9

Hal pertama yang saya perhatikan tentang Linux adalah berbagai cara memasukkan data ke dalam sebuah perintah, saya tahu beberapa tetapi saya tidak tahu ada berapa banyak di sana.

cara yang saya tahu sejauh ini:

perpipaan:

echo -e "zorro\nwurst\nlahmacun\nsozialhilfe" | sort

dari keyboard dengan sinyal file End:

sort
>gurken
>zucker
>braunkohle

dari file:

sort foo

HERE string (sebenarnya disebut dokumen HERE):

sort << HERE
>wasserkopf
>elternzeit
>schuldeingeständnis
>währungsreform
>alabasterhaut
HERE

Apakah ini semua atau ada lebih banyak cara untuk melakukannya, mengapa ada cara yang berbeda sama sekali, ada beberapa cara yang berlebihan?

sharkant
sumber

Jawaban:

9

Setidaknya yang berikut ini:

  1. Opsi perintah: foo --bar

  2. Input standar: foo | barataubar < foo

  3. File: foo *.*(atau dengan membuka file melalui kode foo) †

  4. Ekspor lingkungan: export foo=bar; baz

  5. Lingkungan (tanpa ekspor): foo=bar bazatauenv foo=bar baz

  6. DI SINI doc: foo << EOF bar EOF

  7. DI SINI string: foo <<< bar

  8. Sinyal kill -SIGUSR1 $procid

  9. Berbagai macam komunikasi antar-proses , seperti soket, TCP, file yang dipetakan memori

† ya, saya sadar stdin adalah file (atau file-like). Dan bahwa mengirimkan file seperti ini benar-benar sama dengan mengirimkan opsi

Neil McGuigan
sumber
1
Anda dapat menambahkan foo < barsebagai varian tambahan (file via stdin)
Hagen von Eitzen
14

Untuk memulainya, sort << HEREdan seterusnya bukan string di sini. Itu dokumen di sini. String di sini menggunakan <<<operator. Itu dalam bash (dan beberapa kerang lainnya).

Secara umum, ada dua cara. Satu melalui input standar (dan pengalihan), dan yang lainnya adalah melalui parameter.

  1. Input standar dan pengalihannya

    Ini adalah aliran yang secara default terhubung ke terminal, di mana perintah dijalankan dan dikaitkan dengan fd (file descriptor) 1. Diumpankan apa pun yang diketikkan ke terminal. Padahal itu (input) bisa dialihkan seperti menggunakan pipa |atau menggunakan sini-dokumen atau di sini-string. Maka input tidak datang dari terminal, tetapi melekat pada output standar dari perintah sebelum pipa. Kerang yang berbeda memiliki pengalihan yang berbeda, jadi untuk kategori ini Anda harus memeriksa dokumentasi shell. Cari pengalihan input.

  2. Parameter

    Inilah yang ada dalam contoh Anda sort foo. Memanggil program atau fungsi, Anda melewatkannya satu atau lebih parameter. File lokal hanya satu kemungkinan. Parameter mungkin berisi URL atau apa pun. Opsi di sini tidak terbatas.

Singkatnya, ada dua cara umum:

  • yang pertama abstrak dari logika bagian dalam aplikasi dan memanipulasi input standar pada tingkat OS / shell,

  • sementara yang kedua melibatkan jeroan aplikasi, dan itu adalah mereka yang menawarkan kemungkinan tak terbatas, berdasarkan parameter panggilan sebagai antarmuka.

Untuk kedua cara jawabannya adalah tidak ada batasan. Padahal batas sebenarnya datang dengan OS / shell dan aplikasi itu sendiri.

Kusalananda
sumber