Réponses:
De Bash Trucs et Astuces: « cd » avec un 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 d'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".
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 shell font partie de la programmation 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 le note correctement, 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 builtin
commande dans bash:
function cd() {
new_directory="$*";
if [ $# -eq 0 ]; then
new_directory=${HOME};
fi;
builtin cd "${new_directory}" && ls
}
function ls() { /usr/bin/ls $* }
cd
parce rvm
que ma cd
définition aussi. Voir stackoverflow.com/a/19941991/1601989
Utilisez une fonction au lieu d'un alias:
cs() { cd "$1" && ls; }
Merci Florian Diesch pour le conseil d'utiliser une fonction. Je ne peux pas utiliser cs
le nom car il y a une cs
commande dans le package csound , alors j'ai utilisé lc
.
J'ai ajouté ceci à ~/.bash_aliases
( nano ~/.bash_aliases
):
function lc () {
cd $1;
ls
}
Le terminal doit être reset
pour que cela entre en vigueur.
$1
non cotées comme ça va le faire échouer si le répertoire contient des espaces blancs. En outre, vous devriez vérifier la valeur de retour de cd
; en cas d'échec (par exemple, autorisation refusée), il est inutile d'exécuter le programme ls
. lc() { cd "$@" && ls; }
Comme une extension à cette fonction: cs() { cd "$1" && ls; }
, vous pouvez passer tous les arguments de la fonction à cd
l'aide au $@
lieu de en "$1"
tant que tel: cs() { cd $@ && ls; }
.
J'ai eu du mal à redéfinir cd
parce rvm
que ma cd
définition aussi. Voir https://stackoverflow.com/a/19941991/1601989 . Je ne voulais pas vraiment utiliser builtin
parce que cela ferait sauter tout ce qui rvm
se fait.
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 puis après la rmv
ligne dans le .bashrc
:
alias cd='cdd'
# Use bash built in completion for cd to allow for filenames to be used
complete -r cd