Например, вот команда, которую я использую:
tr -d '\n' < newfile.ppm
Я хочу вывести результаты в тот же самый файл, поэтому я делаю следующее:
tr -d '\n' < newfile.ppm > newfile.ppm
Почему это не работает и как это можно сделать?
решение1
Это чрезвычайно распространенная «ловушка».
Когда вы перенаправляете stdout или stderr для записи в файл, оболочка сначала обрезает файл, чтобы подготовить его к записи. Так что происходит примерно следующее:
- Ваша оболочка устанавливает stdin в
newfile.ppm
- Ваша оболочка обрезается
newfile.ppm
до длины 0 - Ваша оболочка устанавливает stdout в
newfile.ppm
- Ваша оболочка запускается
tr -d '\n'
. Как видите, на данный момент содержимоеnewfile.ppm
уже исчезло, так что читать нечего.
Чтобы обойти это, просто выведите в другой файл. Вы можете переименовать его позже
решение2
Это сделает то, что вам нужно.
[stephan@stephan] ~
$ echo "meh
" > file
[stephan@stephan] ~
$ cat file | tr -d '\n' > file ; cat file
meh