Comment créer un alias pour cd et ls?

32

J'exécute fréquemment la commande ls après avoir exécuté la commande cd . Comment créer un alias (comme cs ) pour cette opération?

    
posée dv3500ea 04.12.2010 - 00:06
la source

6 réponses

9

Merci à Florian Diesch d’avoir trouvé le moyen d’utiliser une fonction. Je ne peux pas utiliser cs comme nom car il y a une commande cs dans le package ​​csound . utilisé lc .

J'ai ajouté ceci à ~/.bash_aliases ( nano ~/.bash_aliases ):

function lc () {
    cd ;
    ls 
}

Le terminal doit être reset pour que cela prenne effet.

    
réponse donnée dv3500ea 04.12.2010 - 00:29
la source
35

De Conseils et astuces Bash: "cd" avec style :

  

Enfin, je veux vous montrer comment écrire votre propre remplacement personnalisé pour la commande 'cd'.

     

Vous trouvez-vous toujours taper la même chose en changeant dans un répertoire? Vous avez probablement au moins la liste des fichiers à chaque fois, peut-être tellement que vos mains tapent automatiquement «ls» après chaque «cd».

     

Eh bien, en essayant de toutes les façons possibles, il n’ya qu’une seule façon d’atteindre correctement le but recherché. Nous devons créer une fonction shell.

     

Les fonctions shell font partie de la programmation shell. Comme dans les langages de programmation compilés, les fonctions fournissent une sorte de modularisation procédurale. On peut créer une fonction générique pour exécuter un bit de logique ou de calcul souvent utilisé avec différents paramètres. Dans ce cas, le paramètre est le répertoire de travail en cours.

     

Voici un exemple simple:

function cs () {
    cd 
    ls
}

Comme le précise ​​@geirha , la fonction ci-dessus échouera si vous essayez de basculer vers un répertoire avec un espace dans son nom. :

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

Vous devriez plutôt utiliser la fonction suivante:

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

Une fois que vous ajoutez ce code à votre ~/.bashrc , vous devriez pouvoir le faire:

[email protected]:~$ cs Documents/
example.pdf tunafish.odt
[email protected]:~/Documents$
    
réponse donnée Isaiah 04.12.2010 - 00:27
la source
23

Vous pouvez utiliser la commande builtin en bash:

function cd() {
    new_directory="$*";
    if [ $# -eq 0 ]; then 
        new_directory=${HOME};
    fi;
    builtin cd "${new_directory}" && ls
}
    
réponse donnée OneOfOne 04.12.2010 - 04:25
la source
16

Utilisez une fonction au lieu d’un alias:

cs() { cd "" && ls; }
    
réponse donnée Florian Diesch 04.12.2010 - 00:17
la source
1

En tant qu'extension de cette fonction: cs() { cd "" && ls; } , vous souhaiterez peut-être transmettre tous les arguments de la fonction à cd en utilisant [email protected] au lieu de "" en tant que tel: cs() { cd [email protected] && ls; } .

    
réponse donnée Smith John 13.02.2013 - 16:54
la source
1

J'ai eu des problèmes pour redéfinir cd parce que rvm change également ma définition cd . Voir lien . Je ne voulais pas vraiment utiliser builtin car cela éviterait tout ce que rvm est en train de faire.

J'ai ajouté les éléments suivants à mon .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
}

Et après la ligne rmv dans le .bashrc :

alias cd='cdd'
# Use bash built in completion for cd to allow for filenames to be used
complete -r cd
    
réponse donnée DavidG 21.05.2014 - 12:56
la source

Lire d'autres questions sur les étiquettes