На этот вопрос уже есть ответ здесь:
Я пытался создать сценарий оболочки Bash, который бы создавал и изменял файл с именем list
. По сути, моя цель с программой - добавить имена к list, создав файл с заголовком (при необходимости).
Однако в настоящее время сценарий не работает в одной конкретной точке: всякий раз, когда я снова запускаю сценарий, старое имя исчезает и заменяется только что введенным именем. Как могу я решить эту проблему?
Мой сценарий:
#!/bin/bash
#Please sign your name here.
echo "Hi, what's your name?"
read name
echo "Hi $name, welcome to the Linux course!"
echo Course Attendees > list
echo $name >> list
Пример проблемы:
$ bash list.sh
Hi, what's your name?
Test
Hi Test, welcome to the Linux course!
$ cat list
Course Attendees
Test
$ bash list.sh
Hi, what's your name?
Test2
Hi Test, welcome to the Linux course!
$ cat list
Course Attendees
Test2
В Bash существует два способа записать в файл (технически, существует намного больше, но во всех отношениях для этого ответа, существует два):
Прежде всего >
оператор, поскольку Вы используете в этой строке:
echo Course Attendees > list
>
оператор будет перезапись что-либо существующее в файле с новым содержанием файла. В действительности это удаляет файл и создает новый с тем же именем.
, Во-вторых, >>
оператор, как используется здесь:
echo $name >> list
Это будет добавлять строки в существующий файл или создавать новый, если он не будет существовать.
, Когда Вы запускаете свой скрипт, Вы всегда перезаписываете свой список курса с "заголовком" Посетителей Курса, вызывая эту ошибку. Измените свою программу, чтобы только добавить строки, если "заголовок" Посетителей Курса присутствует. Мое персональное предложение состояло бы в том, чтобы проверить, существует ли файл. Если это делает, используйте только добавлять операцию. Иначе дайте ему заголовок и создайте его.
Или, более изящно, только выполненный echo Course Attendees > list
, если файл не существует. См. это, ТАК ответьте за большее количество информации относительно как для осуществления проверки как это.