0
votes

Comment exécuter une fonction lorsque la commande CD est exécutée

Je suis un peu nouveau à Linux et j'apprends simplement à rendre l'ordinateur faire le travail que je veux.

Donc, mon souhait est que chaque fois que j'utilise le CD code> Commande, je souhaite qu'il modifie le répertoire, puis répertoriez tous les fichiers présents dans ceux-ci. S'il n'y a pas d'arguments passés, je veux que la commande pwd code> à exécuter. P>

C'est ce que j'ai fait jusqu'à présent. P>

function cd {
        if [ $# -eq 0 ]
        then
                pwd
        else
                cd "$1"; ls -l
        fi
}


0 commentaires

4 Réponses :


0
votes

Vous appelez récursivement votre fonction au lieu d'appeler le CD intégré.

in zsh La commande intégrée peut être utilisée pour exécuter une recherche de fonction de coquille intégrée explicitement. C'est exactement ce que vous devez implémenter une fonction qui a le même nom qu'un shell intégré xxx

ceci s'applique également à bash.

Concernant la commande intégrée

in Bash, vous pouvez utiliser la commande intégrée pour exécuter une commande externe ou une intégrée. C'est ici que Bash est différent de ZSH comme dans la commande ZSH exécute uniquement les commandes externes.

uniquement à bash

CD de commande fonctionne la même chose que CD intégré (en supposant / bin / cd n'existe pas)

dans zsh < / strong>

CD de commande échouerait probablement avec CD: Commande non trouvée sauf si / bin / cd existe


0 commentaires

1
votes

S'il existe, chpwd_functions code> est une matrice de noms de fonction, chacun d'entre eux étant appelé, dans l'ordre, chaque fois que le répertoire de travail change. Dans votre cas, il pourrait être utilisé comme suit:

foo () {
  if [[ $PWD == $HOME ]]; then
    pwd
  else
    ls -l
  fi
}

chpwd_functions+=(foo)


0 commentaires

0
votes

La commande "CD" dans Bash peut prendre des options, il suffit d'utiliser seulement 1 $ 1 déposera le nom du répertoire. Cela passe tout: xxx


0 commentaires

0
votes

J'avais un problème similaire ayant changé de bash à ZSH. Exemple de fonction ... xxx

La solution pour moi était 1. préfixe ma fonction avec fonction et 2. remplacer la commande avec avec < Code> intégré xxx


0 commentaires