Однажды я сделал полезный скрипт для аналогичной цели с функцией fcd для find-n-cd.
Вы вводите, fcd foo
и может произойти 3 вещи:
- Такой каталог foo не найден, затем он возвращается с
"no such directory " $1
- Обнаружен один файл: он проверяет, является ли он каталогом (или просто файлом), и, если это так, он записывается туда.
- Найдено несколько файлов - затем отображается выбор, в котором вы просто вводите номер выбора (или специальный номер для возврата).
Это похоже на то, что вам не нужно вводить весь путь, но вы явно вызываете функцию.
#!/bin/bash
#
# find cd. For input foo, find all directories .../.../foo
# GPLv3 Stefan Wagner (2010, 2012)
#
# doesn't handle blanks in directory names gracefully.
#
fcd ()
{
list=$(locate $1 | egrep "/$1$")
count=$(echo $list | wc -w )
case $count in
0)
echo "unknown directory: "$1 && return
# could search for partial matches Doc => Documentation
;;
1)
if [[ -d "$list" ]]; then
echo "$list";
cd "$list";
else
echo "not a directory: $1"
fi
;;
*)
select directory in $list "/exit/"
do
if [[ "$directory" = "/exit/" ]]; then break; fi
if [[ -d "$directory" ]]; then
echo "$directory";
cd "$directory";
break
else
echo "not a directory: "$1
fi
done
;;
esac
}
Вы должны source
использовать функцию ( source fcd.sh
| . fcd.sh
) и не можете вызывать ее как скрипт, потому cd
что иначе это произойдет только в контексте скрипта, и после ее завершения вы сразу же вернетесь в свой начальный каталог.
Так как он работает locate
, он довольно быстро находит каталоги (но не всегда в курсе).
Он не обрабатывает пробелы в именах каталогов изящно. Если у вас есть элегантное решение проблемы, я был бы счастлив.
shopt -s autocd
в командной строке, это сработало. Теперь я могу просто начать вводить имена каталогов и использовать автозаполнение, а затем нажать return и оболочкуcd
в каталог. Так круто !