"Категорический" ответ, конечно, принесен Вам Бесполезным Использованием cat
Премия.
Цель кошки состоит в том, чтобы конкатенировать (или "соединиться"), файлы. Если это - только один файл, связывание его ни с чем вообще является пустой тратой времени и стоит Вам процесса.
При инстанцировании кошки именно так чтения кода по-другому делают для просто еще одного процесса и еще одного набора потоков ввода/вывода, которые не нужны. Обычно реальная задержка в Ваших сценариях будет неэффективными циклами и фактической обработкой. В большинстве современных систем, одной дополнительной cat
движение не должно уничтожать Вашу производительность, но существует почти всегда другой способ написать Ваш код.
Большинство программ, как Вы отмечаете, может принять аргумент в пользу входного файла. Однако всегда существует встроенная оболочка <
это может использоваться везде, где поток STDIN ожидается, который сохранит Вас один процесс путем выполнения работы в процессе оболочки, который уже работает.
Можно даже стать творческими с тем, ГДЕ Вы пишете это. Обычно это было бы помещено в конце команды перед определением любых выходных перенаправлений или каналов как это:
sed s/blah/blaha/ < data | pipe
Но это не должен быть тот путь. Это может даже быть на первом месте. Например, Ваш пример кода мог быть записан как это:
< data \
sed s/bla/blaha/ |
grep blah |
grep -n babla
Если удобочитаемость сценария является Вашим беспокойством, и Ваш код достаточно грязен что, добавляя строку для cat
как ожидают, поможет следовать, существуют другие способы очистить Ваш код. Тот, что я использую много, которое помогает сделать сценарии easiy для выяснения позже, разбивает каналы в логические наборы и сохраняет их в функциях. Код сценария затем становится очень естественным, и любую часть pipline легче отладить.
function fix_blahs () {
sed s/bla/blaha/ |
grep blah |
grep -n babla
}
fix_blahs < data
Вы могли затем продолжить fix_blahs < data | fix_frogs | reorder | format_for_sql
. За pipleline, который читает как этот, действительно легко следовать, и отдельные компоненты могут быть отлажены легко в их соответствующих функциях.
Под хинду инструмент для управления вызванными пакетом изменениями в / и т.д. (названный отправкой-conf) поддерживает rcs для отслеживания изменений, но это не действительно мощно.
Я склонен присваивать версию своему / и т.д. через git
, тем более, что при помощи различных ответвлений я могу сохранить свой / и т.д. максимально подобным по различным дистрибутивам столь же возможный при хранении как можно большего количества материала в одном месте (для некоторых областей, который, очевидно, перестал работать, апачская конфигурация, например, действительно отличается через различные дистрибутивы). Это работает как это:
У меня есть мой master
repo с моими конфигурационными файлами по умолчанию. Теперь я существую касания с новым дистрибутивом, таким образом, я создаю новое ответвление на основе моего master
ответвление на основе имени распределения (в этом примере debian). Debian сохраняет некоторый файл конфигурации в месте отличающимся от моего master
таким образом, я делаю a git mv file new_loc
. И все прекрасно. Я переключаюсь назад на master
и изменение, что файл, потому что я добавил некоторую определенную директиву конфигурации, когда я объединяюсь master
в мой debian
перейдите перемещенный файл изменяется, таким образом, я могу в основном просто изменить большинство вещей в моем master
ответвление и просто должно объединить изменения в моих ответвлениях "распределения" (обычно, они имеют тенденцию быть большим количеством соединения распределения и ответвлений цели, debian сервер имеет некоторые различия к debian рабочей станции, очевидно, но функции все еще работают).
Так в основном у меня есть "универсальная конфигурация" в master
и (для высказывания это в условиях объектно-ориентированного программирования) наследовало тех, которые в мои ответвления (кто также может наследоваться друг от друга).
Кроме этого, git
механизмы, чтобы "избирательно подойти к выбору" фиксаций (в этом случае изменения в / и т.д./) время от времени были довольно полезны мне, где мне только были нужны части определенной конфигурации.
Теперь к некоторым Вашим идеям:
git
, просто другое ответвление Вы иногда объединяетесь (частично) в master
Существует инструмент, названный etckeeper, я понятия не имею, насколько хороший это.
etckeeper является набором инструментов, чтобы позволить / и т.д. быть сохраненным в мерзавце, подвижном, darcs, или bzr репозиторий. Это сцепляется в способный (и другие диспетчеры пакетов включая конфетку и pacman-g2) для автоматической фиксации изменений, внесенных в / и т.д. во время обновлений пакета. Это отслеживает метаданные файла, которые обычно не поддерживают revison системы управления, но это важно для / и т.д., таково как полномочия/etc/shadow. Это является довольно модульным и настраивается, также будучи прост в использовании, если Вы понимаете основы работы с управлением версиями.
Я также не знаю, может ли это быть сделано продолжить работать *BSD, я подозреваю, что это могло, но что это не будет поддерживаться с портами из поля.
Я использовал fossil
для этого с некоторым успехом. См. мое сообщение об Окаменелости для большего количества информации. Я также использовал названный инструмент etcupdate
который является больше для перемещения между обновлениями, чем отслеживание изменений. Я полагаю, что это было предназначено, чтобы быть сопутствующим инструментом для freebsd-update
однажды. Я в настоящее время не уверен в его состоянии, но оно продолжает работать мой RELEASE-8.*
системы.
http://lists.freebsd.org/pipermail/freebsd-current/2010-June/017927.html http://people.freebsd.org/~jhb/etcupdate/