Como posso criar um alias para cd e ls?

32

Eu frequentemente executo o comando ls depois de executar o comando cd . Como posso criar um alias (como cs ) para esta operação?

    
por dv3500ea 04.12.2010 / 00:06

6 respostas

9

Agradecemos Florian Diesch pela dica de usar uma função. Eu não posso usar cs como o nome porque existe um comando cs no pacote csound , então eu usou lc .

Adicionei isso a ~/.bash_aliases ( nano ~/.bash_aliases ):

function lc () {
    cd ;
    ls 
}

O terminal precisa ser reset para entrar em vigor.

    
por dv3500ea 04.12.2010 / 00:29
35

De Dicas e truques do Bash: 'cd' com estilo :

  

Por fim, quero mostrar a você como criar seu próprio substituto personalizado para o comando 'cd'.

     

Você se encontra sempre digitando a mesma coisa ao mudar para um diretório? Você provavelmente pelo menos lista os arquivos lá todas as vezes, talvez tanto que suas mãos digitam automaticamente 'ls' depois de cada 'cd'.

     

Bem, ao tentar de todas as maneiras que consegui pensar, acontece que existe apenas uma maneira de realizar adequadamente o objetivo que estamos buscando. Temos que criar uma função de shell.

     

As funções do shell fazem parte da programação do shell. Como nas linguagens de programação compiladas, as funções fornecem uma espécie de modularizabilidade processual. Pode-se criar uma função genérica para executar um bit de lógica ou computação frequentemente usado com parâmetros diferentes. Nesse caso, o parâmetro é o diretório de trabalho atual.

     

Aqui está uma simples:

function cs () {
    cd 
    ls
}

Como @geirha observa corretamente, a função acima irá falhar se você tentar mudar para um diretório com um espaço em seu nome :

$ cs A\ B/
-bash: cd: A: No such file or directory
<current directory listing>  

Você deve usar a seguinte função:

function cs () {
    cd "[email protected]" && ls
    }

Depois de adicionar esse código ao seu ~/.bashrc , você poderá fazer isso:

[email protected]:~$ cs Documents/
example.pdf tunafish.odt
[email protected]:~/Documents$
    
por Isaiah 04.12.2010 / 00:27
23

Você pode usar o comando builtin no bash:

function cd() {
    new_directory="$*";
    if [ $# -eq 0 ]; then 
        new_directory=${HOME};
    fi;
    builtin cd "${new_directory}" && ls
}
    
por OneOfOne 04.12.2010 / 04:25
16

Use uma função em vez de um alias:

cs() { cd "" && ls; }
    
por Florian Diesch 04.12.2010 / 00:17
1

Como uma expansão para esta função: cs() { cd "" && ls; } , você pode querer passar todos os argumentos da função para cd usando [email protected] em vez de "" como tal: cs() { cd [email protected] && ls; } .

    
por Smith John 13.02.2013 / 16:54
1

Eu tive problemas ao redefinir cd porque rvm altera também minha cd . Consulte o link . Eu realmente não queria usar builtin porque isso pularia o que o rvm estivesse fazendo.

Adicionei o seguinte ao meu .bashrc :

# cdd allows you to cd to the directory of the given file or directory
function cdd()
{
  if [[ $# -eq 0 ]]; then
    cd
  elif [[ -d "$*" ]]; then
    cd "$*"
  elif [[ -f "$*" ]]; then
    echo "WARNING: file given, cd to file's dirname" 1>&2
    local dir=$(dirname "$*")
    cd "$dir"
  else
    cd "$*"
  fi
}

function cs()
{
  cdd $* && ls
}

E depois da linha rmv no .bashrc :

alias cd='cdd'
# Use bash built in completion for cd to allow for filenames to be used
complete -r cd
    
por DavidG 21.05.2014 / 12:56