Ini bekerja:
$ echo "notify-send HELLO" | sekarang
Ini tidak:
$ at now <echo "notify-send HELLO"
Dikatakan 'file atau direktori tidak ditemukan ".
Saya mengerti ada -f
opsi untuk perintah ini, yang dengannya saya dapat menyediakan file untuk dieksekusi pada saat tertentu.
Jadi ini membuat saya berpikir ... secara umum, bagaimana saya tahu untuk parameter mana operator redirection memberikan nilai?
command-line
bash
vlad-ardelean
sumber
sumber
foo | bar
danbar < foo
setara. Mereka tidak.Jawaban:
Anda menggunakan dua hal berbeda di sini dan harus menggunakan yang ketiga. Ayo lihat:
|
: Ini adalah operator pipa , ini berfungsi untuk melewatkan output dari satu proses sebagai input ke yang lain:Ini menjalankan program
foo
dan meneruskan outputnya sebagai input ke programbar
.>
,<
,>>
Dan<<
: Ini adalah operator redirection , mereka melayani untuk mengirim data ke / dari file :foo > bar
: menjalankan programfoo
dan menyimpan hasilnya ke filebar
, menimpa 1 isinya dan membuatnya jika tidak ada.foo >> bar
: menjalankan programfoo
dan menyimpan hasilnya ke filebar
, menambahkan kontennya dan membuatnya jika tidak ada.foo < bar
: berjalanfoo
, menyuruhnya membaca input dari filebar
.Ini
<<
adalah kasus khusus, karena tidak ada gunanya "menambahkan" input ke perintah,<<
ini terutama (khusus AFAIK) yang digunakan untuk Dokumen Di Sini :Konstruk
<< SomeStringHere > Out.file
akan mengarahkan ulang semua teks yang ditulis hingga menemukan string akhir (EOF
dalam contoh di atas) ke file target. Di sini dokumen memungkinkan Anda untuk dengan mudah memformat string multi-garis dan memasukkan variabel dan karakter khusus.The
<<<
operator, yang Berikut String , seperti Berikut Dokumen tetapi memperluas variabel. Jadi, misalnya:Perintah di atas setara dengan
echo "$bar" | grep foo
.Apa yang sebenarnya Anda cari disebut proses substitusi dan merupakan cara lain untuk meneruskan output dari perintah ke perintah lain. Terdiri dari
<(command)
.Jadi, sebagai
at
contoh, Anda bisa melakukannyaHal di atas berfungsi karena proses substitusi sebenarnya membuat file (baca tautan di atas untuk detail lebih lanjut) dan itu adalah deskriptor file dari file yang diteruskan
<
keat now
.1 Perilaku default adalah menimpa, ini dapat dimodifikasi dengan mengatur
noclobber
opsi untuk bash. Jika diatur,echo foo > bar
akan gagal jikabar
ada. Dalam hal itu, itu bisa dipaksa menggunakanecho foo |> bar
. Lihat bagian 3.6.2 di sini .sumber
<<
dan<<<
(yang @steeldriver disebutkan dalam jawabannya). Selain itu, apakah ada lebih banyak - sesuatu seperti>>>>>>
atau<<<<<<<<<<
?<<<
:)Dalam hal ini,
echo "notify-send HELLO"
adalah proses bukan file - jadi Anda memerlukan substitusi proses alih-alih pengalihan fileAnda juga bisa menggunakan string di sini untuk menghindari
echo
perintah sepenuhnyasumber