tr a A </ etc / hosts | ordenar -r | pr -d> / etc / hosts

9

En esta linea:

tr a A < /etc/hosts | sort -r |pr -d > /etc/hosts 

¿Cuál sería el resultado esperado? Sé que 'a' en minúsculas cambiaría a 'A' en mayúsculas, pero ¿qué sigue? ¿Se sobrescribirá el archivo original ya que la redirección es al mismo nombre de archivo?

tdharrison
fuente
Debería obtener un bash: /etc/hosts: Permission deniederror (suponiendo que su shell sea bash), a menos que esté ejecutando esto como root. /etc/hostsnormalmente se puede escribir solo por root. Si está ejecutando esto como root(lo que realmente no debería), obtendría un vacío /etc/hostscomo Michael Homer explicó.
arielf

Respuestas:

17

El resultado esperado es un /etc/hostsarchivo en blanco .

La redirección se > /etc/hostsproduce y trunca el archivo antes de que los programas comiencen a ejecutarse y trcomience a leer desde el archivo.

Para escribir la salida /etc/hosts, puede trabajar con una copia del archivo (o mover su archivo de salida a su lugar después), o usar el spongecomando de moreutils , que absorberá la entrada estándar y escribirá en un archivo:

tr a A < /etc/hosts | sort -r | pr -d | sponge /etc/hosts

En ese caso, cada "a" /etc/hostsse reemplazará con "A", todas las líneas se ordenarán en reversa de acuerdo con su ubicación , se insertará una línea en blanco entre cada línea y se colocará el resultado /etc/hosts.


También te puede resultar útil:

Michael Homer
fuente
1
Muchas gracias por aclarar lo que debería esperar con la forma en que fue escrito y cómo podría escribirse para obtener el resultado esperado.
tdharrison
moreutils es un conjunto de herramientas realmente genial
Robert Riedl