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

9

Dans cette ligne:

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

quel serait le résultat attendu? Je sais que «a» en minuscule se changerait en «A» en majuscule, mais quelle est la prochaine étape? Le fichier d'origine serait-il écrasé puisque la redirection est vers le même nom de fichier?

tdharrison
la source
Vous devriez obtenir une bash: /etc/hosts: Permission deniederreur (en supposant que votre shell est bash), sauf si vous l'exécutez en tant que root. /etc/hostsest normalement accessible en écriture uniquement par root. Si vous exécutez cela comme root(ce que vous ne devriez vraiment pas), vous obtiendrez un vide /etc/hostscomme l'explique Michael Homer.
arielf

Réponses:

17

Le résultat attendu est un /etc/hostsfichier vierge .

La redirection > /etc/hostsse produit et tronque le fichier avant que les programmes ne démarrent et ne trcommencent à lire le fichier.

Pour écrire la sortie dans /etc/hosts, vous pouvez soit travailler avec une copie du fichier (ou déplacer votre fichier de sortie en place par la suite), soit utiliser la spongecommande de moreutils , qui absorbera l'entrée standard et écrit dans un fichier:

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

Dans ce cas, chaque "a" dans /etc/hostssera remplacé par "A", toutes les lignes seront triées en sens inverse en fonction de votre environnement local , une ligne vierge sera insérée entre chaque ligne , et le résultat sera placé dans /etc/hosts.


Vous pouvez également trouver utile:

Michael Homer
la source
1
Merci beaucoup d'avoir clarifié ce à quoi je dois m'attendre avec la façon dont il a été écrit et comment il pourrait être écrit pour obtenir le résultat escompté.
tdharrison
moreutils est une super suite d'outils
Robert Riedl