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





Вы можете использовать:
echo "file content" > file.txt
Или, если вы хотите видеть содержимое во время записи файла:
echo "file content" | tee file.txt
Подождите, я думал, эхо не может редактировать?
Что-то вроде этого? 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
Есть несколько вариантов. Например
>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 предотвращает переменное расширение, но мы знаем, что вы имели в виду.
@DavidCRankin: я понимаю, что : >file тоже работает, но запрещено ли простое > file в оболочке POSIX? Я тоже думал, что это приемлемо. Кстати, я использовал термин расширение параметр, потому что именно так он называется здесь. Афик, это официальный термин, хотя конечно программисты часто называют его расширением переменная. AFIK, странное название связано с тем, что в исходной оболочке Bourne все переменные назывались «параметрами».
Не беспокойтесь, вы получили мой голос, и да, переменное расширение — это особый тип расширения параметра, поэтому все, что вы написали, было неправильным, но отличалось от того, что обычно видно.
Вы используете
catкакed, не делайте этого. Вместо этого, если вам нужна быстрая минимальная возможность многострочного редактирования, используйте ответ здесьдок (@user1934428 ниже).catиспользуется для файлов конкатенировать, если вы не используете его для этой цели, скорее всего, это UUOC (Ненужное использованиеcat)