buffer () { tty -s && return; tmp=$(mktemp); cat > "${tmp}"; if [ -n "$1" ] && ( ( [ -f "$1" ] && [ -w "$1" ] ) || ( ! [ -a "$1" ] && [ -w "$(dirname "$1")" ] ) ); then mv -f "${tmp}" "$1"; else echo "Can't write in \"$1\""; rm -f "${tmp}"; fi }
Эта команда определяет функцию buffer
, которая создает временный буфер, чтобы избежать ошибок при перенаправлении вывода в файлы. Если задан аргумент, и файл с этим именем существует и доступен для записи, то содержимое буфера перемещается в этот файл. В противном случае, выводится сообщение об ошибке. Это полезно для предотвращения случайного перезаписывания файлов при использовании перенаправления. Альтернатива — использование оператора >>
для добавления вывода в файл, но без риска перезаписи. Аргумент — имя файла, в который нужно записать буфер.