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

Я пытаюсь записать псевдоним для CD!!:1, который берет 2-е слово предыдущей команды и изменяется на каталог того имени. Например, если я ввожу

rails new_project  
cd !!:1  

вторая строка будет CD в "new_project" каталог.

С тех пор!!:1 является неудобным ввести (даже при том, что это коротко, требуется три Клавиши одновременно с "SHIFT", на противоположных сторонах клавиатуры и затем unSHIFTed версии ключа, который был введен дважды СМЕЩЕННЫЙ), я хочу просто ввести что-то как

cd-  

но начиная с!!:1 оценен на командной строке, я (ОЧЕВИДНО), не могу просто сделать

alias cd-=!!:1  

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

alias cd-='!!:1'  

Проблема с этим состоит в том что!!:1 никогда не оценивается, и я получаю сообщение, что никакой каталог не назвал!!:1 существует. Как я могу сделать псевдоним, где замена истории оценена В ТО ВРЕМЯ, КОГДА я ДАЮ КОМАНДУ ПСЕВДОНИМА, не, когда я определяю псевдоним, и не никогда?

(Я попробовал это и в ударе и в zsh, и получаю те же результаты в обоих.)

6
задан iconoclast 9 April 2010 в 16:16
поделиться

3 ответа

Для zsh:

alias cd-='cd ${${(z)$(fc -l -1)}[3]}'

Как это работает: вычисляется

  1. $ (fc -l -1) . fc -l {start} [{end}] означает «список команд истории от {start} до {end} или последний, если {end} отсутствует».
  2. $ {(z) ...} должен разбить ... на массив, как это делает оболочка (см. «Флаги расширения параметров» в man zshexpn ), но на самом деле он разбивается на пробелы. Может это только моя ошибка.
  3. $ {... [3]} берет третье значение из массива. Первое значение - это номер команды, второе - это команда, а третье и последующие - аргументы.
6
ответ дан 8 December 2019 в 05:20
поделиться

Для bash:

alias cd-='cd $(history -p !!:1)'
9
ответ дан 8 December 2019 в 05:20
поделиться

Другой способ сделать то же самое:

Для последнего аргумента:

cd Alt - .

или

cd Esc .

Для первого аргумента:

cd Alt - Ctrl - y

или

cd Esc Ctrl ] - y

8
ответ дан 8 December 2019 в 05:20
поделиться
Другие вопросы по тегам:

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