Я натрапив на команду, щойно дана нижче -
$ echo 'eval "$(jenv init -)"' >> ~/.bash_profile
З чого я можу здогадатися, він, ймовірно, використовується для внесення змін у .bash_profile, але для чого саме він використовується?
Я натрапив на команду, щойно дана нижче -
$ echo 'eval "$(jenv init -)"' >> ~/.bash_profile
З чого я можу здогадатися, він, ймовірно, використовується для внесення змін у .bash_profile, але для чого саме він використовується?
Відповіді:
Він перенаправляє stdout програми до >>
і додає її до даного файлу після.
>> file command
echo a b >> c d
буде додано a b d
до файлу з назвою c
.
>>
робити?За допомогою цього >>
тексту ви додаєте файл до виводу.
Ваша приклад команда складається в основному з декількох частин:
команда >> ім'я файлу
Тож до результату 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 , яка надасть вам наочні вказівки та інформацію про певну команду оболонки.
Для людей з TLDR, які просто люблять бачити приклад;
Стандартний вихід (не помилки) команди перед >> буде доданий до кінця файла, названого ним.
Отже, якщо файл "flintstones.txt" містить;
Fred
Barney
echo Dino >> flintstones.txt
призведе до додавання «Діно» в кінець файлу;
Fred
Barney
Dino
echo Dino > flintstones.txt
щоб показати його вміст було б просто, Dino
якщо це зробити однією стрілкою праворуч.
Знову ж таки, якщо ви
> somefile.txt
Весь вміст файлу буде очищено.
> file
очищає файл, але >> file
нічого не робить.
man bash
написано цілком формальною мовою, це може бути важко зрозуміти. З іншого боку, фразаbash >>
повертає в Google кілька корисних посилань. Це правда, що ми хочемо об'єднати знання, не покладаючись на Google; з цієї причини може підходити навіть питання з легкодоступною відповіддю. Однак той факт, що ви не дали відповіді відразу (див. Чи можу я відповісти на власне запитання? ), Ані вказали на наявні ресурси (що вам, можливо, потрібна допомога, щоб зрозуміти), свідчить про відсутність досліджень.