Открытый каталог от результата ls

У меня есть проблема, я хотел бы передать по каналу ls и CD вместе. Я создаю канал оболочки как:

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

Но это не работает.Вы не могли бы мне помочь. И я не получил ошибки. Filip

1
задан 11 November 2014 в 16:24

2 ответа

Существует несколько проблем с тем, чего Вы делаете попытку. В первую очередь, для устанавливания значения переменной у Вас не может быть пробелов вокруг =. Затем для получения вывода команды, Вам нужны или обратные галочки, или предпочтительно $().

Последнее и наиболее важное, Вы не должны анализировать 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"
4
ответ дан 10 November 2019 в 18:43

Каков вывод Вашей команды?

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

В моем случае у меня был час того, когда каталог был создан.

замена команды Using это работало на меня:

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

С наилучшими пожеланиями, Hugo.

0
ответ дан 10 November 2019 в 18:43

Другие вопросы по тегам:

Похожие вопросы: