
Насколько я понимаю, я хочу использовать comm -23 file1 file2
. file1 — это результат , find
а file2 — cut -c43- list
. Возможно ли записать это в одну строку и не использовать никаких файлов (кроме того, который я назвал list)?
решение1
Замена процесса — ваш друг здесь:
$ comm -23 <(find /dir -name 'something') <(cut -c43- list)
Формат <(command)
применяет временный файловый дескриптор к command
и все это <( )
используется как входной файл для comm
(или любой другой команды).
Смотритеподробнее о замене процессов здесь. Также проверьте man bash
:
Подстановка процесса
Подстановка процесса позволяет ссылаться на вход или выход процесса с помощью имени файла. Он принимает форму <(list) или >(list). Список процессов запускается асинхронно, и его вход или выход отображается как имя файла. Это имя файла передается в качестве аргумента текущей команде в результате расширения. Если используется форма >(list), запись в файл предоставит входные данные для списка. Если используется форма <(list), файл, переданный в качестве аргумента, должен быть прочитан для получения выходных данных списка. Подстановка процесса поддерживается в системах, которые поддерживают именованные каналы (FIFO) или метод именования открытых файлов /dev/fd.