использовать вывод команды alias в качестве имени файла для открытия в vi

Сегодня утром я создал псевдоним, чтобы помочь найти последний файл журнала в каталоге. Мой псевдоним выглядит так:

alias latest="ls -lat | grep ^- | awk '{print \$8}' | head -1"

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

Я думал, что смогу сделать latest | vi, чтобы открыть последний измененный файл в каталоге, но, похоже, это не сработает - vi жалуется, что вывод не является терминалом. Я видел вопрос переполнения стека, в котором предполагалось, что проблема связана с подоболочками и трубопроводами, и поэтому попытался

latest | vi < `tty` > `tty`

Но это меня просто достает

`tty`:ambiguous redirect

не рассуждаю о трубах - я только недавно начал пытаться использовать их всерьез, есть идеи?

2
задан 3 January 2013 в 03:13

2 ответа

Это просто. Если latest создает имя файла на stdout, $() является ответом:

vim $( latest )

См. man bash.

0
ответ дан 3 January 2013 в 03:13

Я полагаю, что пейджера недостаточно?

Я не думаю, что vi поддерживает это (по крайней мере, nvi или недавний FreeBSD vi), однако vim делает:

latest | vim -

] Один из обходных путей - использовать именованный канал:

mkfifo vi.fifo
latest > vi.fifo & vi vi.fifo
rm vi.fifo

Не очень красиво, и FreeBSD vi, кажется, требуется дополнительный :e, прежде чем он читает fifo.

0
ответ дан 3 January 2013 в 03:13

Другие вопросы по тегам:

Похожие вопросы: