Por ejemplo, aquí está mi comando que estoy usando:
tr -d '\n' < newfile.ppm
Quiero enviar los resultados exactamente a ese mismo archivo, así que ahora estoy haciendo:
tr -d '\n' < newfile.ppm > newfile.ppm
¿Por qué esto no funciona y cómo puedo hacer que funcione?
Respuesta1
Este es un "te pillé" extremadamente común.
Cuando redirige stdout o stderr para escribir en un archivo, el shell primero truncará el archivo para prepararlo para la escritura. Entonces lo que está ocurriendo es más o menos lo siguiente:
- Su shell establece stdin en
newfile.ppm
- Su shell se trunca
newfile.ppm
a la longitud 0 - Su shell establece stdout en
newfile.ppm
- Tu shell se ejecuta
tr -d '\n'
. Como puedes ver, en este punto, el contenido denewfile.ppm
ya desapareció, por lo que no hay nada que leer.
Para solucionar este problema, simplemente envíelo a otro archivo. Luego puedes cambiarle el nombre
Respuesta2
Esto hará el trabajo que deseas.
[stephan@stephan] ~
$ echo "meh
" > file
[stephan@stephan] ~
$ cat file | tr -d '\n' > file ; cat file
meh