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?
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.
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$
Utilisez une fonction au lieu d’un alias:
cs() { cd "" && ls; }
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; }
.
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
Lire d'autres questions sur les étiquettes command-line bash alias