Создание, запись и сохранение файла из сценария оболочки

10

Я не хочу писать файл вручную, поэтому я сделал shell-скрипт. Есть ли способ написать и сохранить файл автоматически, не заставляя пользователя нажимать клавиши?

sudo nano blah
#write stuff to file
#save file
#continue

^ Это будет внутри * .sh файла

Или есть другой способ создать простой текстовый файл в сценарии?

Zarkopafilis
источник
1
Я подозреваю, что вы задаете неправильный вопрос здесь. Есть намного более простые способы записи в файл программным способом, чем пытаться управлять редактором, таким как nano. Скажите нам, что вы хотите сделать с файлом вместо этого.
Уоррен Хилл
Я просто хочу создать его и написать несколько строк.
Заркопафилис
Вы спрашиваете о решении, подобном Autoit для Windows, которое может, среди прочего, автоматизировать программы с графическим интерфейсом, или о том, как можно написать текст в сценарии оболочки, например $echo "Some text" > afile.txt?
Stef K
@Zarkopafilis - я отредактировал ваш вопрос, чтобы прояснить, что вы имеете в виду. Если я вас неправильно понял, вы всегда можете откатиться назад. Я также разместил ответ для вас.
Уоррен Хилл

Ответы:

14

Для более сложных последовательностей команд вы должны рассмотреть возможность использования catкоманды со следующим документом . Основной формат

command > file << END_TEXT
some text here
more text here
END_TEXT

Существует два слегка различающихся поведения в зависимости от того, заключена ли в кавычку метка END_TEXT или нет:

  1. метка без кавычек : содержимое пишется после обычных расширений оболочки

  2. метка в кавычках : содержимое документа здесь обрабатывается буквально, без обычных расширений оболочки

Например, рассмотрим следующий скрипт

#!/bin/bash

var1="VALUE 1"
var2="VALUE 2"

cat > file1 << EOF1
do some commands on "$var1" 
and/or "$var2"
EOF1

cat > file2 << "EOF2"
do some commands on "$var1" 
and/or "$var2"
EOF2

Результаты

$ cat file1
do some commands on "VALUE 1" 
and/or "VALUE 2"

а также

$ cat file2
do some commands on "$var1" 
and/or "$var2"

Если вы выводите команды оболочки из вашего скрипта, вам, вероятно, нужна форма в кавычках.

steeldriver
источник
Человек, как долго я искал этот вопрос ^^ один вопрос: это работает только в сценарии или возможно также использовать его непосредственно в оболочке?
derHugo
@derHugo вы можете использовать его непосредственно в оболочке - в этом случае было бы более привычным опускать END_TEXTи просто использовать, CTRL-Dчтобы сигнализировать об окончании ввода. Смотрите, например, Как сигнализировать об окончании ввода
стандартного
7

Для этого не нужно возиться с редактором.

Вы можете добавить что-то в файл с помощью простой команды echo. Например

echo "Hello World" >> txt

Добавит «Hello world» в файл txt. если файл не существует, он будет создан.

Или, если файл уже существует, и вы хотите перезаписать его

echo "Hello World" > txt

Для первой строки: и

echo "I'm feeling good" >> txt
echo "how are you" >> txt 

Для последующих строк.

В самом простом .shсценарий может просто содержать набор команд эха.

Уоррен Хилл
источник