web-dev-qa-db-fra.com

Comment créer un alias pour cd et ls?

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

32
dv3500ea

Merci Florian Diesch pour le conseil d'utiliser une fonction. Je ne peux pas utiliser cs comme nom car il y a une commande cs dans le package csound , j'ai donc utilisé lc.

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

function lc () {
    cd $1;
    ls 
}

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

9
dv3500ea

De Trucs 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 en train de taper la même chose lors de la modification dans un répertoire? Vous avez probablement au moins la liste des fichiers à chaque fois, peut-être à un point tel que vos mains tapent automatiquement "ls" après chaque "cd".

Eh bien, en essayant de toutes les manières possibles, il s’avère qu’il n’ya qu’une façon d’atteindre correctement le but recherché. Nous devons créer une fonction Shell.

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

Voici un simple:

function cs () {
    cd $1
    ls
}

Comme @ geirha fait remarquer, 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 "$@" && ls
    }

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

hello@world:~$ cs Documents/
example.pdf tunafish.odt
hello@world:~/Documents$
35
Isaiah

Vous pouvez utiliser la commande builtinNAME _ dans bash:

function cd() {
    new_directory="$*";
    if [ $# -eq 0 ]; then 
        new_directory=${HOME};
    fi;
    builtin cd "${new_directory}" && ls
}
24
OneOfOne

Utilisez une fonction au lieu d'un alias:

cs() { cd "$1" && ls; }
16
Florian Diesch

J'ai eu des problèmes lors de la redéfinition de cd car rvm modifie également ma définition cd. Voir https://stackoverflow.com/a/19941991/1601989 . Je ne voulais pas vraiment utiliser builtin car cela ferait tout ce que rvm ferait.

J'ai ajouté ce qui suit à 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 ensuite 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
1
DavidG

En tant qu'extension de cette fonction: cs() { cd "$1" && ls; }, vous pouvez passer tous les arguments de la fonction à cd en utilisant $@ au lieu de "$1" en tant que tel: cs() { cd $@ && ls; }.

1
user97589