在C Shell中实现带参数alias:获取第n个最新更新文件夹
在C Shell中创建定位第n个最近更新文件夹的快捷命令
你之前的latestn别名存在两处问题:一是逻辑偏差,head -[expr !:1 + 1]会让你跳转到第n+1个文件夹而非目标的第n个;二是C Shell别名内处理参数表达式的语法不正确。
正确的别名写法
要实现传入参数n,直接跳转到第n个最近更新的文件夹,可使用以下命令:
alias latestn 'cd `ls -dt1 -- */ | head -!:1 | tail -1`'
逻辑说明
!:1是C Shell别名中获取第一个位置参数的语法,比如执行latestn 3时,!:1会被替换为3。ls -dt1 -- */按修改时间倒序列出当前目录下的所有文件夹(-d仅列出目录,-t按时间排序,-1每行显示一个条目)。head -!:1提取前n行内容,再通过tail -1抓取其中最后一行,也就是第n个文件夹的路径,最后用cd进入该目录。
若需对参数做数学运算(如偏移)
如果你的实际需求是跳转到第n+1个文件夹(比如输入1对应第二个),可以在别名中嵌套expr完成数值计算:
alias latestn 'cd `ls -dt1 -- */ | head -`expr !:1 + 1` | tail -1`'
这里通过反引号嵌套expr !:1 + 1计算偏移后的数值,C Shell会先执行expr得到结果,再将结果传递给head命令。
注意事项
- 确保当前目录下有足够数量的文件夹,否则
head和tail可能返回空值,导致cd命令执行出错。 --用于避免文件夹名以-开头时被ls识别为命令选项。
内容的提问来源于stack exchange,提问作者rawat89
相关产品推荐
相关产品推荐

