Abra o diretório do resultado ls

1

Eu tenho um problema, gostaria de canalizar ls e cd juntos. Eu crio o shell pipe como:

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

Mas isso não funciona. Você poderia me ajudar. E eu não recebi nenhum erro. Filip

    
por Vonton 11.11.2014 / 14:24

2 respostas

4

Existem alguns problemas com o que você está tentando. Primeiro de tudo, para definir o valor de uma variável, você não pode ter espaços em torno do = . Então, para capturar a saída de um comando, você precisa de backtics ou, preferencialmente, de $() .

Finalmente, e mais importante, você não deve analisar ls , é muito difícil fazer bem e ser extremamente propenso a erros. Sua abordagem será interrompida se o nome do diretório contiver um espaço, por exemplo. Nos exemplos abaixo, qual é o campo 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      

O nome do arquivo / diretório pode ser o nono campo, ou pode ser o nono e décimo campos, ou até mais. Além disso, o formato de data pode mudar entre as localidades. Basicamente, usar ls para isso é uma ideia horrível. Em vez disso, use stat e classifique por hora:

$ cesta=$(stat --printf "%X\t%n\n" * | sort -nk1,1 | cut -f 2- | awk 'NR==2')
$ cd "$cesta"
    
por terdon 11.11.2014 / 15:14
0

Qual é a saída do seu comando?

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

No meu caso, eu tive a hora de quando o diretório foi criado.

Usando substituição de comandos funcionou para mim:

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

Felicidades, Hugo.

    
por Hugo Serrano 11.11.2014 / 14:39