Linux 当前目录中打开的最后一个目录的别名

Linux 当前目录中打开的最后一个目录的别名,linux,bash,shell,alias,Linux,Bash,Shell,Alias,我想为打开当前目录中的最后一个目录创建别名,也许我认为可以使用此命令获取目录名: ls-1t|头-1 但我不是说要用它 使用函数或别名解决: 别名oo='cd$(ls-1t | head-1)您提到的命令无法区分文件和目录,请改用以下命令: LAST_DIR=$(ls -ltr | egrep ^d | awk '{ print $9 }'| head -1) 首先,不要创建别名!从manbash: 对于几乎所有用途,别名都被shell函数取代 因此,除非您确实知道别名机制是什么,并且您知道您

我想为打开当前目录中的最后一个目录创建别名,也许我认为可以使用此命令获取目录名: ls-1t|头-1 但我不是说要用它

使用函数或别名解决:
别名oo='cd$(ls-1t | head-1)

您提到的命令无法区分文件和目录,请改用以下命令:

LAST_DIR=$(ls -ltr | egrep ^d | awk '{ print $9 }'| head -1)

首先,不要创建别名!从
manbash

对于几乎所有用途,别名都被shell函数取代

因此,除非您确实知道别名机制是什么,并且您知道您确实需要别名,否则请使用函数

以下函数将使您进入当前目录的最后一个目录(关于按名称排序):

cdlast() {
    local shoptnullglob=$(shopt -p nullglob)
    shopt -s nullglob
    local dirs=( */ )
    $shoptnullglob
    ((${#dirs[@]})) && cd -- "${dirs[-1]}"
}
几句话:这不会考虑隐藏目录,除非您设置了shell选项
dotglob
。如果当前目录中没有目录,则函数不执行任何操作(但返回代码为1)


如果需要将cd刻录到上次修改的目录中,事情会变得更棘手(因此更有趣):


如果你喜欢这些函数,把它们放在你的
.bashrc

你几乎拥有了它:
cd$(ls-1t | tail-1)
成功了。你说的最后一个目录是什么意思?你是指最后一个修改过的目录还是最后一个按名称排序的目录?
cdlast() {
    local shoptnullglob=$(shopt -p nullglob)
    shopt -s nullglob
    local dirs=( */ )
    $shoptnullglob
    ((${#dirs[@]})) && cd -- "${dirs[-1]}"
}
cdlast() {
    local shoptnullglob=$(shopt -p nullglob)
    shopt -s nullglob
    local dirs=( */ )
    $shoptnullglob
    ((${#dirs[@]})) || return 1
    local last=${dirs[0]}
    for d in "${dirs[@]}"; do
        [[ $d -nt $last ]] && last=$d
    done
    cd -- "$last"
}