在unix shell(特别是Ubuntu)中是否有办法将目录更改为从ls命令打印的xth目录? 我知道你可以用多种方式对目录进行排序,但是使用ls的输出来获取第x个目录?
示例shell:
$ ls
$ first_dir second_dir third_really_long_and_complex_dir
我希望通过传递3(或2以适当的数组格式)进入third_really_long_and_complex_dir。 我知道我可以简单地复制和粘贴,但是如果我已经在使用键盘,那么如果我知道索引就更容易输入类似“cdls 2”之类的东西。
答案 0 :(得分:0)
交互式会话中cd
的主要问题是您通常希望更改正在处理命令提示符的shell的当前目录。这意味着启动子shell(例如脚本)无济于事,因为任何cd
调用都不会影响父shell。
但是,根据您使用的shell,您可以定义功能来执行此操作。例如在bash中:
function cdls() {
# Save the current state of the nullglob option
SHOPT=`shopt -p nullglob`
# Make sure that */ expands to nothing when no directories are present
shopt -s nullglob
# Get a list of directories
DIRS=(*/)
# Restore the nullblob option state
$SHOPT
# cd using a zero-based index
cd "${DIRS[$1]}"
}
请注意,在此示例中,我绝对拒绝解析ls
,for a number of reasons的输出。相反,我让shell本身检索一个目录列表(或目录链接)......
那就是说,我怀疑使用这个函数(或任何这种效果)是一个非常好的方法来让自己陷入巨大的混乱 - 比如在更改到错误的目录后使用rm
。文件名自动完成已经足够危险,无需强迫自己计数 ...