Como editar o diretório pai mais alto de um caminho enquanto navega

1

Noob question: Digamos que eu esteja em:

user@mj:~/var/www/html/mag/something/else/forever$ 

E eu quero estar em:

user@mj:/var/www/html/mag/something/else/forever$ 

Cuidado com o ~

Eu posso conseguir isso com:

user@mj:~/var/www/html/mag/something/else/forever$ cd /var/www/html/mag/something/else/forever

Às vezes, o caminho é longo, portanto, existe uma maneira de truncar o diretório principal do caminho? Como se um passo pular?

Atualização: Para não digitar o caminho inteiro novamente.

    
por Mohammed Joraid 29.07.2017 / 11:17

2 respostas

4

Hmm ... você pode mudar ~ para / assim ...

echo $(pwd | sed "s#^$HOME##")

(Substitua echo por cd para mover)

Você pode criar um alias se for algo que está fazendo frequentemente, devido a ter muitos caminhos semelhantes em casa e no root

alias cdroot='cd $(pwd | sed "s#^$HOME##")'

Adicione ao final do seu ~/.bashrc para usar a qualquer momento ...

Ou crie uma função bash simples (adicione a ~/.bashrc ) para verificar se estamos em ~ e alternar de raiz para casa e para trás:

function cdroot() {
[[ $PWD =~ $HOME* ]] && cd $(pwd | sed "s#^$HOME##") ||
cd $(pwd | sed "s#^#$HOME#")
}

demonstração de uso:

zanna@toaster:~/var/log/apt$ cdroot
zanna@toaster:/var/log/apt$ cdroot
zanna@toaster:~/var/log/apt$ 
    
por Zanna 29.07.2017 / 11:36
2

Como alternativa ao que Zanna propôs, pode-se alcançar o mesmo comportamento com cd "${PWD##*$HOME}" para aparar a parte ~ .

Aqui está uma demonstração:

$ mkdir -p var/lib
$ pwd
/home/xieerqi
$ cd var/lib
$ pwd
/home/xieerqi/var/lib
$ echo  ${PWD##*$HOME}                                             
/var/lib
$ cd  "${PWD##*$HOME}"                                             
$ pwd
/var/lib

Essa abordagem pode ser combinada com outras substituições de parâmetro para verificar se a variável é nula, ou seja, estávamos na pasta ~ e removemos ~ do caminho desejado, portanto a variável é nula e, portanto, a função deve saltar para / :

$ function trimcd(){ var="${PWD##*$HOME}" ; var=${var:-/} ; cd "$var";}        
$ pwd
/home/xieerqi
$ trimcd
$ pwd
/

Com uma adição, podemos até alternar entre o diretório raiz e o diretório inicial:

$ function trimcd(){ var="${PWD##*$HOME}" ;[ "$var" = "/" ] && var="$HOME";var=${var:-/} ; cd "$var";}                                               
$ pwd  
/
$ trimcd
$ pwd
/home/xieerqi
$ trimcd
$ pwd
/
$ cd ~/var/lib
$ trimcd
$ pwd
/var/lib
    
por Sergiy Kolodyazhnyy 29.07.2017 / 11:56