07.02.2009 17:23

zbфайлдескрипторы баш

Пока комментил предыдущий пост вспомнил о полезной фиче баш - файл дескрипторы, короче баш умеет перенаправлять ввод-вывод команд в специальные файлы, которые можно подсунуть программе.

Проще объяснить на примерах:

Скажем нам нужно сравнить по-быстрому содержимое двух директорий, можно написать мегаскрипт а можно обойтись и одной командой:



1
diff <(ls dir1|sort) <(ls dir2|sort)



чтобы понять как это работает достаточно заменить diff на echo:



1
echo <(ls dir1|sort) <(ls dir2|sort)



/dev/fd/63 /dev/fd/62



Такой приём обычно полезен в случае когда программа-обработчик не умеет выводить или вводить данные с устройств стандартного ввода-вывода, а так-же в случае когда требуется жонглировать с вводом-выводом нескольких программ одновременно.



ps: внимание файл дескрипторы могут быть не включены в вашей версии bash (насколько я помню отсутствует в каких-то редхатах)


Тэги: bash script tips
+ 8 -
Похожие Поделиться

Username 08.02.2009 12:46 #
консоль-гуру детектед))
Круто, больше фишек! Я любитель изящного кода
chemikadze 07.01.2010 02:43 #
хм, если сделать vim <(modprobe -l | grep cpu)то получаю пустой файл, но cat все видит. ЧЯДНТ?
zb 07.01.2010 05:16 #
Не повезло наверное. у меня все работает.
смотри версию bash
bash --version
GNU bash, version 4.0.33(1)-release (x86_64-pc-linux-gnu)
Copyright (C) 2009 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later

This is free software; you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.