Що означає `>>` у термінальній команді?


14

Я натрапив на команду, щойно дана нижче -

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

З чого я можу здогадатися, він, ймовірно, використовується для внесення змін у .bash_profile, але для чого саме він використовується?


26
Просто, щоб ви могли знати, що вдосконалити в майбутньому: man bashнаписано цілком формальною мовою, це може бути важко зрозуміти. З іншого боку, фраза bash >>повертає в Google кілька корисних посилань. Це правда, що ми хочемо об'єднати знання, не покладаючись на Google; з цієї причини може підходити навіть питання з легкодоступною відповіддю. Однак той факт, що ви не дали відповіді відразу (див. Чи можу я відповісти на власне запитання? ), Ані вказали на наявні ресурси (що вам, можливо, потрібна допомога, щоб зрозуміти), свідчить про відсутність досліджень.
Каміль Маціоровський

5
Детальний огляд операторів переадресації командного рядка див. У Unix.stackexchange.com/q/159513/85039
Сергій Колодяжний

Відповіді:


31

Він перенаправляє stdout програми до >>і додає її до даного файлу після.


28
"програма перед" Що це означає? Команда очевидно, але перенаправлення також можна записати попередньо, тобто>> file command
rexkogitans

Приклад. У Ubuntu 18.04 я міг набрати "apt search rust >> x" Частина "apt search rust" шукає доступні пакети для терміна rust, а потім надсилає це до стандартного (звичайно терміналу в цьому випадку). Однак ">> x" говорить про переадресацію виводу на кінець файлу "x". Якби я просто хотів замінити файл, мені знадобився б лише один ">".
NomadMaker

@rexkogitans Навіть у середині команди, якщо ви хочете зробити ваш код заплутаним для читання. echo a b >> c dбуде додано a b dдо файлу з назвою c.
kasperd

@kasperd Ви також можете розсіяти перенаправлення stdin між ними в будь-якому порядку, додатково.
rexkogitans

48

Коротка відповідь - що >>робити?

За допомогою цього >>тексту ви додаєте файл до виводу.

Ваша приклад команда складається в основному з декількох частин:

команда >> ім'я файлу

Тож до результату commandдодається би filename.


Що відбувається в конкретному випадку echo?

У вашому конкретному випадку echo "…"команда виводить свої вхідні аргументи до «stdout», що є так званим «стандартним дескриптором виводу». Вхідні аргументи echoслід за новим рядком ( \n), щоб отримати розрив рядка.

Тут «стандартний дескриптор виводу» - це не що інше, як вихідний потік, який відображається в оболонці під час виконання команди. (Тобто, коли ви вводите echo fooта натискаєте Enter, foo\nце фактичний результат echoкоманди, який відображається вашою оболонкою з fooнаступним новим рядком.)

В основному все, що пише у ваш командний рядок, використовує stdout. Існує також інший дескриптор під назвою "stderr", який зазвичай використовується для повідомлень про помилки. Він також буде надрукований як stdout, тому іноді їх можна буде перекреслити. І є дескриптор stdin, який використовується для введення даних. Дивіться цю статтю для отримання додаткової інформації.

Як ви перенаправляєте вихід в оболонку?

Ви завжди можете перенаправляти stdout до дескриптора файлів, що можна зробити з одним із цих операторів:

  • >переадресація до дескриптора файлу. Він створює файл, якщо його не існує, або, якщо він вже існує, обрізає файл перед записом. Тому файл буде перезаписано stdout.

  • >>додає до дескриптора файлу. Він створює файл, якщо його не існує.

Ви також можете перенаправити stderr, використовуючи 2>або 2>>схожим чином. Або ви можете об'єднати stderr та stdout в один файл: 2>&1це робить. Для отримання додаткової інформації про переадресацію та ще кілька прикладів ви можете прочитати цей невеличкий посібник .

Як я можу зрозуміти, що означає конкретний фрагмент коду оболонки?

Як правило, ви можете спробувати обяснила.com , яка надасть вам наочні вказівки та інформацію про певну команду оболонки.


7

Для людей з TLDR, які просто люблять бачити приклад;

Стандартний вихід (не помилки) команди перед >> буде доданий до кінця файла, названого ним.

Отже, якщо файл "flintstones.txt" містить;

Fred
Barney

echo Dino >> flintstones.txt призведе до додавання «Діно» в кінець файлу;

Fred
Barney
Dino

Я рекомендую вам додати приклад, echo Dino > flintstones.txtщоб показати його вміст було б просто, Dinoякщо це зробити однією стрілкою праворуч.
JakeGould

-2

Знову ж таки, якщо ви

> somefile.txt

Весь вміст файлу буде очищено.


Чому ви копіюєте іншу відповідь?
Тото

@Тото я не думаю, що він це робить. Це здається додатковим і дуже цінним.
Волкер Сігель

@Toto На жаль! Придивившись ближче, насправді це не так. Неправильно навіть у багатьох аспектах. Як не дивно - він тут новий, але активний в інших місцях - тому, мабуть, не просто тролінг.
Волкер Зігель

2
@VolkerSiegel: > fileочищає файл, але >> fileнічого не робить.
Тото

але це жодним чином не відповідає на питання і має бути коментарем
phuclv
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.