Напишите файл, добавьте, если он существует, иначе создайте в bash
Я пытаюсь написать файл с содержимым переменной, но если файл не существует, создайте его:
До сих пор я получил это:
echo "$Logstring" >> $fileLog
Что не хватает, потому что, когда файл не существует, возникает ошибка. Требуется ли условие if?
Ответ 1
#! /bin/bash
VAR="something to put in a file"
OUT=$1
if [ ! -f "$OUT" ]; then
mkdir -p "`dirname \"$OUT\"`" 2>/dev/null
fi
echo $VAR >> $OUT
# the important step here is to make sure that the folder for the file exists
# and create it if it does not. It will remain silent if the folder exists.
$ sh out hello/how/are/you/file.out
geee: ~/src/bash/moo
$ sh out hello/how/are/you/file.out
geee: ~/src/bash/moo
$ sh out another/file/lol.hmz
geee: ~/src/bash/moo
$ find .
.
./out
./another
./another/file
./another/file/lol.hmz
./hello
./hello/how
./hello/how/are
./hello/how/are/you
./hello/how/are/you/file.out
geee: ~/src/bash/moo
$ cat ./hello/how/are/you/file.out
something to put in a file
something to put in a file
geee: ~/src/bash/moo
$ cat ./another/file/lol.hmz
something to put in a file
escaped "для dirname необходимы, если в папке файла есть пробелы в имени.
Ответ 2
Используйте команду "touch":
touch $fileLog echo "$Logstring" >> $fileLog
Ответ 3
Чтобы добавить к вышеупомянутому комментарию, я должен был посмотреть это так, думал, что это могло бы стоить поделиться, касаясь файла, который уже существует, только обновит отметку даты последнего изменения, так что это хороший ответ, если вы хотите нажать ваши ключи SSH на несколько серверов и т.д.