这要么是我 20 年前在某个地方得到的,要么是我梦到的。
基本上:
如果如果输入blobblob
我得到
blobblob: command not found
很公平。
我希望这样当我的 shell 收到这些错误时(找不到命令),它会检查是否存在具有该名称(“blobblob”)的目录,如果存在,则指向cd
该目录。
我确信有一些原因不这样做或谨慎行事。
我只是认为它会非常整洁,我想通过在某个地方找到方法来尝试一下(比如这里!)。
我不知道如何进行这可能意味着的 shell 编程。
答案1
- 重击:
shopt -s autocd
- 兹什:
setopt autocd
- tcsh:
set implicitcd
此外,“autojump”也是一个有用的工具。安装后,它会记住目录,以便您可以键入 j abc,如果您以前访问过 abc,请说 x/d/f/g/t/abc 那么它会 cd 到那里!
https://github.com/joelthelion/autojump
答案2
答案3
这也有效,
cdf name_of_file_or_directory
..假设您设置了一个源自 shell 的自定义 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}
}
答案4
把这个放在你的~/.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