(отвечает за bash)
Нет. Оболочка сначала обрабатывает перенаправления, а затем усекает файл. Только после этого cat
запускается, и он работает с пустым файлом.
Существует инструмент, называемый sponge
в moreutils
пакете, который позволяет это сделать:
cat somefile.txt | sort | uniq | sponge somefile.txt
Эта команда может быть упрощена (удалить UUOC ):
sort -u somefile.txt | sponge somefile.txt
Без sponge
вас нужно записать во временный файл, и если команда выполнена успешно, перезапишите входной файл
tmpfile=$(mktemp) sort -u somefile.txt > "$tmpfile" && mv "$tmpfile" somefile.txt