Это кажется мне очевидным вопросом, но я не могу найти ответ ... Предположим, я хочу найти определенный txt-файл в своем проекте и в терминале I, наберите:
find -name test.txt
В результате я мог бы получить что-то вроде:
./directory1/directory2/directory3/directory4/test.txt
Как перейти к directory4
без необходимости вводить полный путь?
Я бы использовал поддержку истории bash, чтобы сделать это. После любой команды вы можете снова обратиться к ней с помощью !!
:
[jk@pecola tmp]$ find . -name test.text
./directory1/directory2/directory3/test.text
Для выполнения ls -l
на выходе последней команды:
[jk@pecola tmp]$ ls -l $(!!)
ls -l $(find . -name test.text)
-rw-rw-r-- 1 jk jk 0 Jan 23 20:49 ./directory1/directory2/directory3/directory4/test.text
В этом примере мы используем синтаксис $(...)
, чтобы использовать вывод команды в качестве аргумента для другой команды.
Поскольку !!
ссылается на последний запуск команды, теперь нам нужно быть более конкретным, если мы хотим повторно запустить команду find, поскольку с тех пор мы запустили ls
. Мы можем использовать синтаксис !<match>
для повторного запуска последней команды, которая началась с <match>
[jk@pecola tmp]$ dirname $(!find)
dirname $(find . -name test.text)
./directory1/directory2/directory3
[jk@pecola tmp]$ cd $(dirname $(!find))
cd $(dirname $(find . -name test.text))
[jk@pecola directory4]$ ls
test.text
. Я также нахожу это удобным для повторного выполнения команд, для которых вам нужен sudo: 113]
Если сеанс терминала находится в графическом интерфейсе, вы можете выделить текст с помощью мыши (, левая кнопка ) и вставить весь текст в положение текстового курсора, щелкнув по средней . кнопка мыши.