Напишите файл, добавьте, если он существует, иначе создайте в 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 на несколько серверов и т.д.