Ver pasta pai usando 'ls -l .. $ (que bash)'

0

Eu verifiquei a festança em que estou trabalhando

$ which bash
/usr/local/bin/bash
$ ls -l $(which bash)
lrwxr-xr-x 1 me 30 Oct 27 10:40 /usr/local/bin/bash -> ../Cellar/bash/4.4.23/bin/bash

Depois, venho ver o diretório pai do bash usr/local/bin/

$ ls -l ../$(which bash)
ls: cannot access '..//usr/local/bin/bash': No such file or directory
$ ls -l ..$(which bash)
ls: cannot access '../usr/local/bin/bash': No such file or directory

Infelizmente, volto aos erros.

Como eu poderia navegar para a pasta pai do bash usando a substituição de comandos $?

    
por JawSaw 27.10.2018 / 09:12

2 respostas

2

O que você está fazendo é tentar executar ls em ..//usr/local/bin/bash , o que não sai:

$ echo ../$(which bash)
..//usr/local/bin/bash

ao mesmo tempo em que você está usando ls -l ..$(which bash) , os resultados dependem de onde seu diretório de trabalho atual está, porque você está abordando relativamente.

Portanto, este não deve dar nenhum erro (ele procura pelo arquivo não o DIR pai):

$ cd /usr
$ ls -ld ../$(which bash)

Você precisa usar o comando dirname :

$ dirname $(which bash)
/bin

ou:

$ ls -ld $(dirname $(which bash))
drwxr-xr-x 2 root root 4096 Oct 17 16:46 /bin

Quando seu arquivo é um link (como bash no seu caso, e no meu caso):

$ ls -ld $(dirname $(readlink -f $(which sh)))
drwxr-xr-x 2 root root 4096 Oct 17 16:46 /bin
    
por 27.10.2018 / 09:31
0

Tecnicamente, usar which bash nem sempre retornará o bash que você está realmente executando (você pode estar executando outra versão, mas com um caminho que inclua uma versão diferente). No Linux, você pode obter o executável do shell em execução do sistema de arquivos proc usando /proc/$$/exe ( $$ é o id do processo ou o shell em execução), então o que você quer é

$(dirname $(readlink /proc/$$/exe))
    
por 27.10.2018 / 10:41

Tags