从 ls 结果打开目录

从 ls 结果打开目录

我有一个问题,我想将 ls 和 cd 连接在一起。我创建了如下 shell 管道:

cesta = ls -lat | awk 'NR==2 {print $8"/"}'
cd $cesta

但它不起作用。你能帮我吗?而且我没有收到任何错误。Filip

答案1

您所尝试的操作存在一些问题。首先,要设置变量的值,在 周围不能有空格=。然后,为了捕获命令的输出,您需要使用反引号,或者最好是$()

最后,也是最重要的,你不应该解析ls,这很难做好,而且极易出错。例如,如果您的目录名称包含空格,您的方法就会失败。在下面的示例中,字段是什么8th

 $ ls -l
 total 0
-rw-r--r-- 1 terdon terdon 0 Nov 11 14:59 file1
-rw-r--r-- 1 terdon terdon 0 Nov 11  2013 file2
-rw-r--r-- 1 terdon terdon 0 Nov 11 15:00 file 2
                                    -----
                                      |--------> 8th field      

文件/目录名称可能是第 9 个字段,也可能是第 9 个和第 10 个字段,甚至更多。另外,日期格式可能会因语言环境而异。基本上,使用ls这个是个糟糕的主意。相反,使用stat并按时间排序:

$ cesta=$(stat --printf "%X\t%n\n" * | sort -nk1,1 | cut -f 2- | awk 'NR==2')
$ cd "$cesta"

答案2

你的命令输出什么?

ls -lat | awk 'NR==2 {print $8"/"}'

就我而言,我知道目录的创建时间。

使用命令替换它对我有用:

$ ABCD=`ls -lat | awk 'NR==2 {print $9"/"}'`
$ cd $ABCD
$ pwd
$ /home/myuser_name/.gconfd

干杯,雨果。

相关内容