Запись в файл во время скрипта

Мне нужно создать и написать файл в середине скрипта. Есть ли способ сделать это? Обычно для создания и записи в файл я использовал cat > имя файла, затем писал то, что мне нужно, и нажимал Ctrl+D для сохранения и выхода. Однако я не смогу нажать ctrl+d в скрипте, чтобы использовать кошку >. Что бы я использовал?

Вы используете cat как ed, не делайте этого. Вместо этого, если вам нужна быстрая минимальная возможность многострочного редактирования, используйте ответ здесьдок (@user1934428 ниже). cat используется для файлов конкатенировать, если вы не используете его для этой цели, скорее всего, это UUOC (Ненужное использование cat)

David C. Rankin 01.04.2022 08:53

Спасибо, что сообщили мне, что в настоящее время я учусь, и это мое первое знакомство с Unix. Я не знал, что cat можно использовать неправильно и работать без ошибок. Я посмотрю дальше в этом спасибо.

Girls_Game_As_Well 01.04.2022 09:16
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
2
19
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Вы можете использовать:

echo "file content" > file.txt

Или, если вы хотите видеть содержимое во время записи файла:

echo "file content" | tee file.txt

Подождите, я думал, эхо не может редактировать?

Girls_Game_As_Well 01.04.2022 04:20

Что-то вроде этого? if [ -f httpd.conf ] >then echo ~/apache/conf/httpd.conf exists >cat httpd.conf >else >touch http.conf >echo # # Это основная конфигурация HTTP-сервера Apache файл. Он содержит # директивы конфигурации, которые дают инструкции серверу. # не добавляйте косую черту в конце пути к каталогу. # ServerRoot "/usr" # # DocumentRoot: Каталог, из которого вы будете обслуживать свои документы. # DocumentRoot "/Library/WebServer/Documents" >>http.conf

Girls_Game_As_Well 01.04.2022 05:29
Ответ принят как подходящий

Есть несколько вариантов. Например

>file_name

гарантирует, что впоследствии у вас будет файл пустой с именем file_name. Если вместо этого написать

touch file_name

тогда file_name будет генерироваться только в том случае, если его раньше не было. Если он существовал, его отметка времени обновляется.

Вы также можете сделать

[ -f file_name ] || touch file_name

Это сгенерирует file_name, если он не существует, но оставит отметку времени без изменений, если файл уже существовал.

Вы также можете заполнить файл информацией, содержащейся в вашем скрипте, используя так называемый здесь-документ:

cat >file_name <<'END_OF_THE_WORLD'
Hello
$PATH
Goodbye
END_OF_THE_WORLD

Одинарные кавычки гарантируют, что ваш файл действительно содержит литеральную строку $PATH, т. е. для текста не выполняется раскрытие параметров.

Нормальный вариант усечения — :> file. Также стоит отметить, что при зацикливании в сценарии заключение всего цикла в { ... } > file приведет к записи всего вывода сразу, а не в режиме буферизации строк. Символ в кавычках в heredoc предотвращает переменное расширение, но мы знаем, что вы имели в виду.

David C. Rankin 01.04.2022 08:47

@DavidCRankin: я понимаю, что : >file тоже работает, но запрещено ли простое > file в оболочке POSIX? Я тоже думал, что это приемлемо. Кстати, я использовал термин расширение параметр, потому что именно так он называется здесь. Афик, это официальный термин, хотя конечно программисты часто называют его расширением переменная. AFIK, странное название связано с тем, что в исходной оболочке Bourne все переменные назывались «параметрами».

user1934428 01.04.2022 08:51

Не беспокойтесь, вы получили мой голос, и да, переменное расширение — это особый тип расширения параметра, поэтому все, что вы написали, было неправильным, но отличалось от того, что обычно видно.

David C. Rankin 01.04.2022 10:35

Другие вопросы по теме