我想创建别名来打开当前目录中的最后一个目录,也许我认为可以使用此命令获取目录的名称: ls -1t |头-1 但我不是说要用它。
用函数或别名解决: alias oo =' cd $(ls -1t | head -1)'
答案 0 :(得分:2)
首先,不要创建别名!来自man bash
:
对于几乎所有目的,别名都被shell函数取代。
因此,除非你真的知道别名机制是什么,并且你知道你真的需要别名,否则请使用函数。
以下函数将使您进入当前目录的最后一个目录(关于按名称排序):
cdlast() {
local shoptnullglob=$(shopt -p nullglob)
shopt -s nullglob
local dirs=( */ )
$shoptnullglob
((${#dirs[@]})) && cd -- "${dirs[-1]}"
}
一些评论:除非设置了shell选项dotglob
,否则不会考虑隐藏目录。如果当前目录中没有目录,则该函数不执行任何操作(但返回代码为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"
}
如果您喜欢这些功能,请将它们放在.bashrc
。
答案 1 :(得分:0)
您提到的命令无法区分文件和目录,请改用以下命令:
LAST_DIR=$(ls -ltr | egrep ^d | awk '{ print $9 }'| head -1)
答案 2 :(得分:0)
dirs=(*/) # an array of directories in the CWD
last_dir=${dirs[-1]} # the "last" directory lexicographically