CD в каталог из ИСТОРИИ в сценарии удара или псевдониме, например, $ (!!)

Это объяснено в tcsh странице справочника (я подозреваю, что Вы используете tcsh, не csh); см. третий заключенный в кавычки абзац.

Оболочка ведет список псевдонимов, которые могут быть установлены, сброшены и распечатаны командами непсевдонима и псевдонимом. После того, как командная строка анализируется в простые команды (см. Команды), первое слово каждой команды, слева направо, проверяется, чтобы видеть, имеет ли это псевдоним. Если так, первое слово заменяется псевдонимом. Если псевдоним содержит ссылку истории, он подвергается замене Истории (q.v). как будто исходная команда была предыдущей входной строкой. Если псевдоним не содержит ссылку истории, список аргументов оставляют нетронутым.

Таким образом, если бы псевдоним для 'ls' был 'ls-l' команда 'ls/usr', то стал бы 'ls-l/usr', список аргументов, здесь являющийся без помех. Если псевдоним для 'поиска' был 'grep! ^/etc/passwd' затем 'счет поиска' стал бы 'grep счетом/etc/passwd'. Псевдонимы могут использоваться для представления метасинтаксиса синтаксического анализатора. Например, 'исказите печать 'PR! * | lpr'' определяет ''команду'' ('печать') который PR (1) с его аргументы построчному принтеру.

Замена псевдонима повторяется, пока первая команда не имеет никакого псевдонима. Если замена псевдонима не изменяет первое слово (как в предыдущем примере), это отмечается для предотвращения цикла. Другие циклы обнаруживаются и вызывают ошибку.

Хорошее обходное решение должно предшествовать команде с a \ символ для запрещения расширения псевдонима:

alias df 'printf "\n"; \df -hP | column -t'
4
24.04.2013, 15:16
3 ответа

fc -s выполняет предыдущую команду снова:

alias cdlast='cd "$(dirname "$(fc -s 2> /dev/null)")"'

Или используйте eval "$(history -p !!)":

alias cdlast='cd "$(dirname "$(eval "$(history -p !!)")")"'
4
27.01.2020, 20:49

Можно использовать псевдоним.

alias cdlast='cd "$(dirname "$(eval $(history -p !!))")"'

Удостоверьтесь, что у Вас есть двойные кавычки там. Они препятствуют тому, чтобы результаты замен команды были разделены на отдельные слова, если у них есть пробелы и интерпретируемый как подстановочные шаблоны, если у них есть специальные символы такой как * и ?.

3
27.01.2020, 20:49

Я использовал бы функцию:

gotofile () { pushd "$(find . -name "$1" -printf "%h\n")"; }

Изменитесь "." на некоторый каталог как соответствующий (" ~", возможно)

2
27.01.2020, 20:49

Теги

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