O que é uma maneira rápida de alternar entre vários diretórios para administração do sistema? Quero dizer, eu posso usar pushd .
e popd
alternar, mas e se eu quiser armazenar múltiplos e percorrê-los, em vez de removê-los permanentemente da parte inferior da pilha?
bash
shell-script
administration
Volomike
fonte
fonte
$CDPATH
possivelmente?cd -
depois de instigado a partir dessa pergunta.cd
todos os lugares à mão. Foi doloroso. Conclusão automática usada com a tecla tab.Respostas:
Use
pushd
e depois os nomes especiais para os diretórios em sua pilha diretório:~1
,~2
, etc.Exemplo:
A maneira mais eficaz de usar
pushd
dessa maneira é carregar sua lista de diretórios, adicionar mais um diretório ao diretório atual e então você pode pular entre os números estáticos sem afetar a posição dos diretórios na pilha.É importante notar também que
cd -
irá levá-lo para o último diretório que você estava em. Assim serácd ~-
.A vantagem
~-
sobre apenas-
é que-
é específico paracd
, ao passo que~-
é expandida pelo shell da mesma forma que~1
,~2
, etc, são. Isso é útil ao copiar um arquivo entre caminhos de diretório muito longos; por exemplo:O acima é equivalente a:
fonte
cd -
cd -
age como um quarto adianteDROP DUP
, por exemplo, se alguém começa com no diretório a , com a pilha abcd , acd -
altera a pilha para bbcd . Talvez isso seja umbash
bug, pois um segundocd -
altera a pilha novamente para abcd . A partir disso, podemos inferir quecd -
utiliza alguma estrutura de dados separada para armazenar o diretório anterior, além de alterar a pilha.cd -
usa$OLDPWD
e nada mais.cd -
fosse o recurso bash anterior , depois eles adicionaram uma pilha, mas temiam quebrar o código antigo mais do que queriam um design mais simples. A correção para anterior,cd -
age como um QuartoOLDPWD @ SWAP OLDPWD ! DUP .
Ao contráriocd foo
, ocd -
imprime o nome do diretório trocado.bash
O built-inpushd
com as opções+
e-
pode girar a pilha de diretórios. A sintaxe pode ser um pouco confusa, talvez porque essa pilha seja uma matriz com base em zero . Essas funções simples do wrapper percorrem a pilha de diretórios:Teste: configure uma pilha de quatro diretórios.
Agora / tmp é o diretório atual e a pilha se parece com:
Mude para o próximo diretório na pilha (e mostre) quatro vezes:
Resultado:
Mude para o diretório anterior na pilha ((e mostre)) quatro vezes:
Resultado:
Uma observação sobre
cd -
: a resposta do curinga ajudou a ilustrar comocd -
não usa o array $ DIRSTACK ((usa a variável $ OLDPW )), de modo quecd -
não afeta o $ DIRSTACK da maneira que uma troca baseada em pilha deveria. Para corrigir isso, aqui está uma simples função de troca baseada em $ DIRSTACK :Teste:
Resultado:
fonte
popd
remova-o sem alterar os diretórios, remova-opopd -n
. Para limpar a pilha façadirs -c
. Pena que os designers do bash enterraram essas funções úteis em sintaxe não intuitiva. Vejaman bash
empushd
,dirs
etc.Eu sugiro que você instale o fasd . Permite-lhe saltar rapidamente para qualquer diretório em que você já esteja digitando apenas uma pequena fração do nome.
Exemplo: se você visitou
/home/someName/scripts/
, pode pular para lá apenas digitando,z scr
por exemplo. É muito mais conveniente do que lembrar a ordem na pilha do histórico ou algo semelhante.fonte
Quando você está em
cd
algum lugar, o Bash armazena no diretório de trabalho antigo uma variável de ambiente$OLDPWD
,.Você pode voltar para esse diretório com
cd -
, que é equivalente acd "$OLDPWD"
.Você pode alternar entre diretórios da seguinte maneira:
fonte
Eu escrevi um script chamado
xyzzy
para fazer isso:O jeito que eu uso isso é copiar para a
/usr/bin
pasta e depois para a pastachmod a+x
. Em seguida, edito meu~/.bashrc
arquivo de conta raiz e de usuário para incluir estas linhas na parte inferior:O 'xy' é uma forma abreviada do comando para digitação mais rápida.
Em seguida, posso armazenar o diretório atual na lista com ...
... e repita conforme necessário. Depois de preencher esta lista com os diretórios de que preciso, eles permanecem lá até eu reiniciar o computador, porque é quando o / tmp é limpo novamente. Eu posso então digitar ...
... para listar os diretórios atualmente salvos. Para mudar para um diretório, tenho duas opções. Uma opção é especificar o caminho pelo índice (e é um índice baseado em 1) da seguinte forma:
... que mudaria para o diretório que é o segundo item da lista. Ou, eu poderia deixar de fora o número do índice e apenas:
... para fazer um loop através de cada diretório que eu precisar. Para mais comandos que você pode executar, digite:
Obviamente, o trabalho é mais divertido com as declarações de eco tolas que adicionei.
Observe que xyzzy é uma referência à aventura de texto da Caverna Collosal , onde a digitação de xyzzy permite alternar entre duas salas no jogo para evitar pavor.
fonte
Eu uso um pequeno script chamado z [link] , que também pode ser interessante, mesmo que não faça exatamente o que você pediu.
fonte
Há também
cd_func
de Petar Marinov, basicamentecd
com um histórico de até 10 entradas: http://linuxgazette.net/109/misc/marinov/acd_func.htmlSimplesmente use
cd --
para mostrar uma lista dos últimos 10 diretórios nos quais vocêcd
editou ecd -N
(ondeN
está o índice da entrada) para ir para lá.fonte
Eu uso principalmente o ZSH com o perfil oh-my-zsh . Você pode digitar em um terminal a seguinte correspondência:
Então você pode simplesmente usar as setas (para cima e para baixo) para percorrer todo o histórico do shell, que mostra apenas as entradas que começam com os caracteres acima. Então, por exemplo, se você acessou
/home/morfik/Desktop/
e/home/morfik/something/
, pode alternar entre os diretórios muito rapidamente. Não importa quantas entradas no histórico do shell você tenha, mas quando tiver muito, use uma expressão melhor, ou seja,cd /home/morf
e aqui pressione as setas para cima / para baixo no teclado.Há também outra maneira de alcançar a solução. Nesse caso, você precisa usar o tmux e o FZF . Então você apenas cria uma tecla de atalho, por exemplo, ctrl-r, e quando você pressiona, sua janela atual será dividida e você verá o seguinte:
Agora você pode usar expressões para pesquisar na lista. Eu apenas digitei
^cd /media
, que retorna apenas as entradas que começam com a frase. Obviamente, você pode apenas digitar'cd 'home
para corresponder ao comando e também ao nome do diretório inteiro (não caminho, apenas nome):fonte
Você pode conseguir isso com vários aliases em seu
~/.bashrc
(ou equivalente)O objetivo principal é digitar quase o mínimo (por exemplo,
d5
pula para o diretório número 5 no pool) para alternar entre os diretórios no pool. Também queremos facilitar a adição / remoção de diretórios de / para o pool:Agora, toda vez que você pressiona um diretório na pilha, ele é adicionado ao pool numerado na posição 0 (o diretório atual) e você pode pular (alternar diretórios) usando muito pouca digitação (
d<N>
) e pode visualizar seu pool atual numerado em qualquer hora apenas digitandod
.Alguns exemplos de uso desses aliases:
Exibir o conjunto de diretórios numerado (o diretório atual é # 0)
Alternar entre dirs: use
d<N>
Adicionar um novo diretório ao pool
Pule um pouco mais:
Remover / pop do diretório superior (atual) da piscina
fonte
Se você tiver o iselect instalado, poderá fazer algo assim:
Isso fornecerá a você um menu navegável interativo com teclas de seta, em tela cheia, para selecionar um diretório
cd
para.Se você não usou
pushd
na sessão atual do shell, a lista de diretórios no menu começa com apenas uma entrada, o diretório atual. Se houver apenas uma entrada, essedirselect
alias será feitocd
sem a tela do menu, portanto, ele efetivamente não fará nada (exceto impedircd -
que seja útil)Para adicionar um novo diretório à lista, use
pushd dir
(oupushd -n dir
para adicionar um diretório semcd
- ao mesmo tempo)Você pode preencher previamente a
pushd
pilha fazendo algo como o seguinte em seu.bashrc
ou~/.bash_profile
:Você pode remover entradas com
popd
oupopd -n
.Ver
help pushd
,help popd
ehelp dirs
em bash para mais informações. E, claroman iselect
,.BTW,
iselect
provavelmente está disponível pré-embalado para sua distribuição. É para Debian e Ubuntu etc, e provavelmente para outros também.fonte
Se você possui 5 ou 10 diretórios, usa muito e não se importa necessariamente com os diretórios 5 ou 10 usados recentemente , configure alguns aliases de comando como
E então, quando eu quero ir para o diretório da página inicial do Apache, basta digitar
cdw
como respondi no equivalente de alias para um link simbólico? .fonte
Estou usando o jump para alterar rapidamente o diretório de trabalho.
Para adicionar o diretório atual:
Para listar todos os seus favoritos:
por exemplo:
Agora você pode facilmente pular para outro diretório:
Ele suporta o preenchimento automático para o bash e o zsh.
Editar (em resposta a @Joe): o binário
jump-bin
é armazenado/usr/local/bin
e, com o script de integração do bash (no meu PC localizado em/var/lib/gems/1.9.1/gems/jump-0.4.1/bash_integration/shell_driver
), ele cria uma função do bashjump
que chamajump-bin
.fonte
Eu uso
alias
para navegar. Se você tiver poucos diretórios que são acessados com frequência, basta definir aliases. Por exemplo,Então simplesmente
levará você para
/etc
.fonte