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?
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.
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$
Vous pouvez utiliser la commande builtin
NAME _ dans bash:
function cd() {
new_directory="$*";
if [ $# -eq 0 ]; then
new_directory=${HOME};
fi;
builtin cd "${new_directory}" && ls
}
Utilisez une fonction au lieu d'un alias:
cs() { cd "$1" && ls; }
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
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; }
.