Я натрапив на команду, щойно дана нижче -
$ 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; з цієї причини може підходити навіть питання з легкодоступною відповіддю. Однак той факт, що ви не дали відповіді відразу (див. Чи можу я відповісти на власне запитання? ), Ані вказали на наявні ресурси (що вам, можливо, потрібна допомога, щоб зрозуміти), свідчить про відсутність досліджень.