Criando meu primeiro script bash, não consigo fazer com que o comando cd seja 'grudado'. [duplicado]

11

Para meu primeiro script bash, quero criar algo que realmente esteja me incomodando: quando eu alternar pastas, quero que o conteúdo dessa pasta seja exibido automaticamente. Eu tentei adicionar este código a seguir para ~ / .bashrc:

alias go='cd; ls'

Simples o suficiente, pensei! Não tão. Enquanto digitar go /etc de fato lista o conteúdo de / etc, meu diretório de trabalho não mudou de fato, eu ainda estou no que eu estava antes. Como posso remediar isso?

    
por Ram 11.08.2014 / 21:02

2 respostas

29

No seu exemplo, go /etc fará cd; ls /etc . Isso significa que, primeiro, cd mudará o diretório atual para seu diretório pessoal. Em seguida, ls /etc exibirá o conteúdo de /etc .

Você pode conseguir o que deseja definindo uma função assim:

function go() {
    cd "" && ls
}

Ou apenas digite-o na linha de comando em uma única linha:

function go() { cd "" && ls; }

Em seguida, go /etc fará o que você deseja.

refere-se ao primeiro parâmetro passado para o comando neste exemplo /etc . Você pode consultar os parâmetros subseqüentes com , e assim por diante.

    
por Timo Kluck 11.08.2014 / 21:09
-1

Você pode querer combinar isso com a pilha de diretórios do bash (dirs). Isso lhe dará a oportunidade de digitar: go ... , para ver a (s) pasta (s) anterior (es) na sua pilha, em vez de digitar o nome dela. um exemplo:

function go() { 
 if [ "" == "..." ]; then popd >/dev/null ; else pushd "" >/dev/null ; fi
 ls $@
}

você pode substituir ... por outra palavra-chave, como _back . algo que não será um nome de diretório.

você notará o ls $@ , o que significa que todos os parâmetros restantes serão passados para ls. por isso, se quiser ir e ter uma lista longa ou uma listagem de tempo inversa, use: go /var -l ou go /etc -ltr

    
por CorneC 12.08.2014 / 10:31