Apa maksud `>>` dalam perintah terminal?

14

Saya menemukan perintah yang baru saja diberikan di bawah ini -

$ echo 'eval "$(jenv init -)"' >> ~/.bash_profile

Dari apa yang bisa saya tebak, ini mungkin digunakan untuk melakukan perubahan di .bash_profile tetapi sebenarnya untuk apa itu digunakan?

raksasa
sumber
26
Hanya untuk memberi tahu Anda apa yang harus diperbaiki di masa mendatang: man bashditulis dengan bahasa yang cukup formal, mungkin sulit dimengerti. Di sisi lain, frasa bash >>mengembalikan beberapa tautan bermanfaat di Google. Memang benar kami ingin mengumpulkan pengetahuan tanpa mengandalkan Google; karena alasan ini, bahkan sebuah pertanyaan dengan jawaban yang mudah dicari mungkin cocok. Namun fakta bahwa Anda tidak langsung memberikan jawaban (lihat Dapatkah saya menjawab pertanyaan saya sendiri? ) Atau menunjuk ke sumber daya yang ada (bahwa Anda mungkin perlu bantuan untuk memahami) menunjukkan kurangnya penelitian.
Kamil Maciorowski
5
Untuk gambaran umum terperinci dari operator pengalihan baris perintah, lihat unix.stackexchange.com/q/159513/85039
Sergiy Kolodyazhnyy

Jawaban:

31

Ini mengarahkan kembali stdout program sebelumnya >>dan menambahkannya ke file yang diberikan setelahnya.

kai-dj
sumber
28
"program sebelumnya" Apa artinya itu? Perintah jelas, tetapi pengalihan juga dapat ditulis diawali, yaitu>> file command
rexkogitans
Sebuah contoh. Pada Ubuntu 18.04 saya bisa mengetikkan "apt search rust >> x" Bagian "apt search rust" mencari paket yang tersedia untuk istilah rust dan kemudian mengirimkannya ke standar out (biasanya terminal dalam kasus ini). Namun ">> x" mengatakan untuk mengarahkan output ke akhir file "x". Jika saya hanya ingin mengganti file, saya hanya perlu satu ">".
NomadMaker
@rexkogitans Bahkan di tengah-tengah perintah jika Anda ingin membuat kode Anda membingungkan untuk dibaca. echo a b >> c dakan ditambahkan a b dke file bernama c.
kasperd
@kasperd Anda juga dapat menyebarkan pengalihan stdin di antara dalam urutan apa pun, juga.
rexkogitans
48

Jawaban singkat - apa fungsinya >>?

Dengan >>, Anda menambahkan output dari perintah ke file.

Contoh perintah Anda terdiri dari beberapa bagian, pada dasarnya:

perintah >> nama file

Jadi output commandakan ditambahkan ke filename.


Apa yang terjadi dalam kasus spesifik echo?

Dalam kasus spesifik Anda, echo "…"perintah menampilkan argumen inputnya menjadi "stdout", yang disebut "deskriptor keluaran standar". Argumen masukan untuk echodiikuti oleh baris baru ( \n), sehingga Anda mendapatkan jeda baris.

Di sini, "deskriptor output standar" tidak lebih dari aliran output yang ditampilkan di shell Anda ketika Anda menjalankan perintah. (Yaitu, ketika Anda mengetik echo foodan menekan Enter, foo\nadalah output sebenarnya dari echoperintah, yang ditunjukkan oleh shell Anda seperti yang foodiikuti oleh baris baru.)

Pada dasarnya apa pun yang menulis ke baris perintah Anda menggunakan stdout. Ada juga deskriptor lain yang disebut "stderr" yang biasanya digunakan untuk pesan kesalahan. Itu juga akan dicetak seperti stdout, jadi kadang-kadang mereka bisa diselingi. Dan ada deskriptor stdin yang digunakan untuk input. Lihat artikel ini untuk info lebih lanjut.

Bagaimana Anda mengarahkan output ke shell?

Anda selalu dapat mengarahkan stdout ke deskriptor file, yang dapat Anda lakukan dengan salah satu operator ini:

  • >pengalihan ke deskriptor file. Itu membuat file jika tidak ada, atau, jika sudah ada, memotong file sebelum menulis. Karena itu file tersebut akan ditimpa dengan stdout.

  • >>ditambahkan ke deskriptor file. Itu menciptakan file jika tidak ada.

Anda juga dapat mengarahkan ulang stderr dengan menggunakan 2>atau 2>>dengan cara yang serupa. Atau Anda dapat menggabungkan stderr dan stdout menjadi satu file: 2>&1lakukan itu. Untuk info lebih lanjut tentang pengalihan dan beberapa contoh lainnya, Anda dapat membaca tutorial kecil ini .

Bagaimana saya bisa mengetahui apa arti kode shell tertentu?

Secara umum, Anda mungkin ingin mencoba menjelaskanshell.com , yang akan memberi Anda panduan visual dan informasi tentang perintah shell tertentu.

slhck
sumber
7

Untuk orang-orang TLDR yang hanya suka melihat contoh;

Output standar (bukan kesalahan) dari perintah sebelum >> akan ditambahkan ke akhir file bernama setelah itu.

Jadi jika file "flintstones.txt" berisi;

Fred
Barney

echo Dino >> flintstones.txt akan menghasilkan 'Dino' ditambahkan ke akhir file;

Fred
Barney
Dino
Mark Boyce
sumber
Saya akan merekomendasikan Anda menambahkan contoh echo Dino > flintstones.txtuntuk menunjukkan konten itu hanya Dinojika dilakukan dengan panah kanan tunggal.
JakeGould
-2

Sekali lagi, jika Anda melakukannya

> somefile.txt

Seluruh konten file akan dihapus.

batu-batuan
sumber
Mengapa Anda menyalin jawaban lain?
Toto
@Toto Saya rasa dia tidak. Tampaknya aditional, dan sangat berharga.
Volker Siegel
@Toto Ups! Melihat lebih dekat, sebenarnya bukan itu masalahnya. Salah dalam berbagai aspek. Aneh - dia baru di sini, tetapi aktif di tempat lain - jadi mungkin bukan hanya trolling.
Volker Siegel
2
@ VolkerSiegel: > filemenghapus file tetapi >> filetidak melakukan apa-apa.
Toto
tetapi ini tidak menjawab pertanyaan dengan cara apa pun dan harus menjadi komentar
phuclv