Alterando diretórios com Bash

5

Eu queria saber se havia uma maneira mais fácil de escolher diretórios para cd dentro do diretório atual.

Por exemplo, existe uma maneira de obter apenas uma lista numerada do diretório atual e fazer cd 1 , cd 2 , cd 3 , etc. Existe alguma outra maneira de facilmente cd entre sub-diretórios em um diretório atual?

    
por Halcyon 28.09.2015 / 00:08

4 respostas

7

Se você definir a opção autocd em seu ~/.bashrc , poderá alterar os diretórios apenas digitando o nome. Combinado com a conclusão da tabulação, você tem apenas que digitar os primeiros caracteres únicos e, em seguida, pressionar a tecla Tab para mover para o diretório desejado.

Do manual:

If set, a command name that is the name of a directory is executed as if it were the argument to the cd command. This option is only used by interactive shells.

Adicione a opção ao seu ~/.bashrc com:

shopt -s autocd 

Se você usa o Zsh, defina a opção com:

setopt autocd 
    
por 28.09.2015 / 00:14
3

Adicione uma função ao seu ~ / .bashrc

mycd() { local x; shopt -s {null,dot}glob; select x in ../ */; do cd "$x"; break; done; }

uso: mycd

    
por 28.09.2015 / 00:18
2

Use a conclusão! Por padrão, isso requer que você digite um prefixo exclusivo do diretório para o qual deseja alternar e, em seguida, pressione a tecla Tab . Mais precisamente, pressionar a tecla Tab completa o primeiro prefixo exclusivo.

Você pode ajustar a conclusão por meio de algumas opções readline . Em particular, defina show-all-if-ambiguous para exibir imediatamente uma lista se houver vários conclusões possíveis ou show-all-if-unmodified para exibir uma lista apenas se o prefixo atual não pode ser completado devido à ambigüidade. Essas opções entram no arquivo ~/.inputrc , por exemplo:

set show-all-if-ambiguous on

Você pode configurar o bash para fazer repetidas pressões da Tab girar através das possíveis conclusões. Para fazer isso, vincule a chave a menu-complete em vez da padrão complete . No seu ~/.inputrc :

"\t": menu-complete

Dependendo da sua instalação, a conclusão após cd pode oferecer apenas diretórios ou todos os arquivos. Se ele oferecer todos os arquivos, você precisará ativar a conclusão sensível ao contexto. Certifique-se que o pacote bash-completion está instalado (está disponível na maioria das distribuições) e que você tem a linha p>

. /etc/bash_completion

no seu ~/.bashrc (ou em /etc/bash.bashrc se sua distribuição tiver isso).

Zsh é um shell alternativo que possui muitos recursos interessantes para uso interativo que o bash não possui, incluindo a possibilidade de escolher conclusões em um menu. Você pode querer tentar.

    
por 28.09.2015 / 02:19
1

Você também pode usar um espaço reservado de caractere único para cada diretório para o qual você migra atribuindo o caminho do arquivo de diretório atual a uma variável de ambiente, como ...

    a='pwd'
    b='pwd'

etc. Então você pode pular para cada diretório com:

    cd $a
    cd $b

Certifique-se de usar 'back-ticks', que significa executar o comando entre os ticks e o sinal de igual, que atribui a saída à variável.

Você também pode atribuir os caminhos a variáveis de um caractere escrevendo-os também, como:

    c="/home/user/projects/c++/headers/docs"

então você pode mudar para esse diretório usando ...

    cd $c
    
por 28.09.2015 / 21:07