Answers:
shopt -s autocd
setopt autocd
set implicitcd
同样,“自动跳转”是一个有用的工具。安装后,它会记住目录,以便您可以输入j abc;如果您以前曾经访问过abc,请说x / d / f / g / t / abc,那么它将CD到那里!
https://github.com/joelthelion/autojump
cd
键入起来并不难,当您为它们提供更多上下文时,大多数制表符补全机制会更聪明。
autocd
禁用了javascript在bash版本4的溶液中加入因此,它是不提供的MacOS(其仍具有的bash 3.xx版),除非一个替代,较新的bash安装(例如,经由自制)。
该autojump工具提供了一个使用最频繁的目录列表类似的机制。但是,它确实需要增加键入的乏味,j
Space但这可以通过经常猜对来弥补。
这是我迄今最接近的DWIM。
我曾经为类似的目的制作了一个有用的脚本,并使用了fcd函数来查找-n-cd。
您键入fcd foo
,可能会发生3件事情:
"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
,因此查找目录的速度非常快(但并非总是最新的)。
它不能优雅地处理目录名称中的空格。如果您有一个解决问题的优雅方法,我将很高兴。
cd
自动执行,而无需键入任何命令。此答案更适合于终端中的快速目录导航。
/etc/bash.bashrc
ubuntu中, function command_not_found_handle
看起来好像可以对其进行修改。
这也可以
cdf name_of_file_or_directory
..假设您在外壳程序中设置了自定义cdf.sh脚本(如下)。对于以目录为参数的脚本,此脚本仅进入找到目录的父目录。将以下行添加到您的.bashrc或.zshrc中,无论如何。
source ~/bin/cdf.sh
并将此代码添加到您需要从头创建的〜/ bin / cdf.sh文件中。
#!/bin/bash
function cdf() {
THEFILE=$1
echo "cd into directory of ${THEFILE}"
# For Mac, replace find with mdfind to get it a lot faster. And it does not need args ". -name" part.
THEDIR=$(find . -name ${THEFILE} |head -1 |grep -Eo "/[ /._A-Za-z0-9\-]+/")
cd ${THEDIR}
}
把这个放在你的 ~/.bashrc
#aliases to cd into the core dirs
PROJECT_PARENT_DIRS[0]="$HOME/repos"
#you can make it search more dirs by assigning new indexes to your other root dirs
for PARENT_DIR in ${PROJECT_PARENT_DIRS[@]} ; do
if [ -d "$PARENT_DIR" ]; then
for PROJECT_DIR in $(/bin/ls $PARENT_DIR); do
if [ ! -z `which $PROJECT_DIR` ]; then
continue # don't set alias if there is something already a command on the path with the same name
fi
if [ -d "$PARENT_DIR/$PROJECT_DIR" ]; then
alias "$PROJECT_DIR"="cd $PARENT_DIR/$PROJECT_DIR"
fi
done
fi
done
#end alias
shopt -s autocd
在命令行上输入了它。现在,我可以开始输入目录名称并使用自动完成功能,然后按return键和shellcd
进入目录。非常酷 !