web-dev-qa-db-fra.com

Comment obtenir la commande système d'origine après l'avoir remplacée par une fonction?

Je suis à un Hackathon en ce moment, donc si quelqu'un répondait à cette question bientôt, tu me ferais une énorme faveur.

J'ai écrit une fonction appelée ls () dans mon .bashrc qui ressemble à ceci:

ls() {

  if(some condition);
    do something
  else
    ls; #(CALL TO ORIGINAL ls SYSTEM CALL)
  fi

}

Mais ici, quand il passe à l'autre partie, il entre simplement dans une boucle infinie

Comment puis-je appeler l'appel système ls d'origine autrement? Comment puis-je faire en sorte que ls se comporte différemment dans un dossier et normalement dans les autres?.

3
Programming Noob

Vous recherchez command:

commande [-pVv] commande [arg ...]

Exécutez la commande avec args supprimant la recherche de fonction Shell normale. Seules les commandes intégrées ou les commandes trouvées dans le PATH sont exécutées. Si l'option -p est donnée, la commande de recherche est exécutée en utilisant une valeur par défaut pour PATH qui est garantie de trouver tous les utilitaires standard. Si l'option -V ou -v est fournie, une description de la commande est imprimée. L'option -v provoque l'affichage d'un seul mot indiquant la commande ou le nom de fichier utilisé pour appeler la commande; L'option -V produit une description plus détaillée. Si l'option -V ou -v est fournie, l'état de sortie est 0 si la commande a été trouvée et 1 sinon. Si aucune option n'est fournie et qu'une erreur s'est produite ou qu'une commande est introuvable, l'état de sortie est 127. Sinon, l'état de sortie de la commande intégrée est l'état de sortie de la commande.

Exemple:

$ pwd() {
> echo 'command test'
> command pwd
> }
$ pwd
command test
/etc

Il y a aussi builtin, qui est plus restrictif:

intégré Shell-intégré [arguments]

Exécutez le shell intégré spécifié, en lui passant des arguments et retournez son état de sortie. Cela est utile lors de la définition d'une fonction dont le nom est le même que celui d'un shell intégré, en conservant la fonctionnalité du builtin dans la fonction. Le cd intégré est généralement redéfini de cette façon. Le statut de retour est faux si Shell-builtin n'est pas une commande intégrée de Shell.

7
Nykakin

Vous pouvez également être intéressé par which, qui vous donne le chemin d'accès au programme dans votre $PATH avec ce nom.

$ which ping
/bin/ping

(Bien que je recommande la réponse de Nykakin, car elle résout votre problème. Ce n'est qu'un autre outil pour toute personne intéressée)

1
jackweirdy