tr a A </ etc / hosts | сортувати -r | pr -d> / тощо / хостів


9

У цьому рядку:

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

який був би очікуваний результат? Я знаю, що нижній регістр 'a' зміниться на верхній регістр 'A', але що далі? Чи був би перезаписаний оригінальний файл, оскільки переспрямовування має те саме ім’я файлу?


Ви повинні отримати bash: /etc/hosts: Permission deniedпомилку (якщо припустити, що ваша оболонка є ударом), якщо ви не працюєте з цим root. /etc/hostsяк правило, для запису тільки з коренем. Якщо ви запускаєте це як root(чого ви насправді не повинні), ви отримаєте порожнє, /etc/hostsяк пояснив Майкл Гомер.
аріельф

Відповіді:


17

Очікуваний результат - порожній /etc/hostsфайл.

Перенаправлення > /etc/hostsвідбувається і скорочує файл до запуску програм і trпочинає читати з файлу.

Щоб записати висновок /etc/hosts, ви можете або працювати з копією файлу (або переміщувати свій вихідний файл на місце згодом), або скористатися spongeкомандою з moreutils , яка буде вбирати стандартний вхід і записувати у файл:

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

У цьому випадку кожен «а» в /etc/hostsбуде замінений на «А», все рядки будуть відсортовані в зворотному відповідно до локалі , порожній рядок буде вставлена між кожним рядком , і результат буде введений в /etc/hosts.


Вам також можуть бути корисні:


1
Дуже дякую за роз’яснення, що я повинен очікувати, як це було написано, і як можна написати, щоб отримати очікуваний результат.
tdharrison

moreutils - це дійсно чудовий набір інструментів
Роберт Рідл,
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.