Перейдите в каталог из HISTORY в скрипте bash или псевдониме, например $(!!)

Перейдите в каталог из HISTORY в скрипте bash или псевдониме, например $(!!)

Мне часто нужно перейти в каталог файла в моей файловой системе, но я не уверен, где находится этот файл.

Я ищу это так:

find -type f -name "myfile.txt"

Для простоты предположим, что возвращается один результат, например:

/какой-то/супер/длинный/путь/который/я/не/хочу/вводить/мой/файл.txt

Затем я обычно печатаю это:

cd $(dirname $(!!))

Чтобы перейти в каталог файла, который я искал....

Есть ли возможность поместить это в скрипт оболочки или псевдоним, чтобы я мог просто ввести:

cdlast

и он работает:

cd $(dirname $(!!))

используя ИСТОРИЮ оболочки? Я пробовал, и история оболочки, похоже, отсутствует в скриптах bash.

решение1

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

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

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

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

решение2

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

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

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

решение3

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

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

Измените "." на какой-либо подходящий каталог (например, "~")

Связанный контент