У вас должен быть установлен "noclobber", проверьте следующий пример:
$ echo 1 > 1 # create file
$ cat 1
1
$ echo 2 > 1 # overwrite file
$ cat 1
2
$ set -o noclobber
$ echo 3 > 1 # file is now protected from accidental overwrite
bash: 1: cannot overwrite existing file
$ cat 1
2
$ echo 3 >| 1 # temporary allow overwrite
$ cat 1
3
$ echo 4 > 1
bash: 1: cannot overwrite existing file
$ cat 1
3
$ set +o noclobber
$ echo 4 > 1
$ cat 1
4
"noclobber" предназначен только для перезаписи, но вы все равно можете добавить его:
$ echo 4 > 1
bash: 1: cannot overwrite existing file
$ echo 4 >> 1
Чтобы проверить, установлен ли у вас этот флаг, вы можете ввести echo $-
и посмотреть, установлен ли у вас флаг C
(илиset -o |grep clobber
).
Есть требования? Вы можете просто сохранить вывод в переменной, а затем проверить, пуста ли она. Проверьте следующий пример (обратите внимание, что способ проверки переменной требует точной настройки в соответствии с вашими потребностями, в примере я не цитировал его и не использовал что-либо вроде ${cmd_output+x}
, который проверяет, установлена ли переменная, чтобы избежать записи файла содержащие только пробелы.
$ cmd_output=$(echo)
$ test $cmd_output && echo yes || echo no
no
$ cmd_output=$(echo -e '\n\n\n')
$ test $cmd_output && echo yes || echo no
no
$ cmd_output=$(echo -e ' ')
$ test $cmd_output && echo yes || echo no
no
$ cmd_output=$(echo -e 'something')
$ test $cmd_output && echo yes || echo no
yes
$ cmd_output=$(myAPICommand.exe parameters)
$ test $cmd_output && echo "$cmd_output" > myFile.txt
Пример без использования одной переменной, содержащей весь вывод:
log() { while read data; do echo "$data" >> myFile.txt; done; }
myAPICommand.exe parameters |log
поместите файл /etc/pure-ftpd/conf/AltLog
, содержащий толькоstats:/var/log/pureftpd.log
-это должно решить отсутствующий -журнал -проблему (, когда pure-ftpd.conf
находится внутри/etc/pure-ftpd/
).