.png)
Мне часто нужно перейти в каталог файла в моей файловой системе, но я не уверен, где находится этот файл.
Я ищу это так:
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")"; }
Измените "." на какой-либо подходящий каталог (например, "~")