尝试 cd 到 bash 中的最后一个目录
如果我尝试这个:
cd $(ls -l | tail -l)
它将导致:
Illegal variable name.
我不知道该怎么做
答案1
$(...)
是 Korn/POSIX shell 语法。 (t)csh 中的命令替换是通过`...`
.
在 中tcsh
,你可以这样做:
set dirs = (./*/); cd $dirs[$#dirs]:q
进入cd
当前目录中非隐藏目录的词法列表中的最后一个目录(或目录的符号链接)。
这比:
cd "`ls | tail -n 1`"
如果文件名包含换行符或以-
(或+
后跟数字)开头,或者当前目录中的最后一个文件不是目录,则该方法不起作用。
您的 Ksh 语法cd $(ls | tail -1)
更糟糕,因为它也会因文件名包含空格、制表符或通配符而失败。
请注意,顺序是词汇顺序,例如2
排序后 10
。对于数字排序,通过 GNU 实现ls
,您可以使用-v
选项 ( cd "`ls -v | tail -n 1`"
)
使用zsh
shell,你可以这样做:
cd ./*(/[-1])
或者也考虑目录的符号链接:
cd ./*(-/[-1])
要按数字对文件进行排序:
cd ./*(n-/[-1])
答案2
导致错误的原因是您获得的字符串不是目录的名称,而是包含有关目录的一些信息的字符串,drwxrwxr-x. 3 alessiosavi alessiosavi 4096 Sep 10 09:51 workplace-tmp
而不是您的目标名称workplace-tmp
为了完成这项工作,我们可以运行以下步骤:
1. 将最后一个目录保存在变量中
2. 检查变量是否是一个目录
3. cd 进入该目录
file=$(ls -l | tail -n1 | awk '{print $9}') ; if [ -d "$file" ];then cd $file; else echo "$file not a directory" ; fi
“是 bash,你只需要 1 行”