48 votes

Écrire une fonction en une ligne dans ~/.bashrc

Pourquoi, lorsque j'essaie d'écrire une fonction en une seule ligne dans .bashrc fichier,

list(){ ls -a }

J'obtiens une erreur ?

bash: /home/username/.bashrc: line num: syntax error: unexpected end of file

mais quand je l'écris sur plusieurs lignes, c'est bon ?

list(){
    ls -a
}

49voto

Volker Siegel Points 12033

Il existe un ; nécessaire à la fin de la fonction :

list(){ ls -a ; }

devrait fonctionner.

La syntaxe d'une définition de fonction pour bash est la suivante

name () { list ; }

Notez qu'il comprend un ; qui ne fait pas partie de la list .

Que le ; est nécessaire à cet endroit est une sorte d'anomalie syntaxique. Ce n'est pas bash spécifique, c'est la même chose pour les ksh , mais il le ; n'est pas nécessaire dans les zsh .

36voto

muru Points 180007

Fonctions en bash sont essentiellement des commandes composées (ou des blocs de code). A partir de man bash :

Compound Commands
   A compound command is one of the following:
   ...
   { list; }
          list  is simply executed in the current shell environment.  list
          must be terminated with a newline or semicolon.  This  is  known
          as  a  group  command. 

...
Shell Function Definitions
   A shell function is an object that is called like a simple command  and
   executes  a  compound  command with a new set of positional parameters.
   ... [C]ommand is usually a list of commands between { and },  but
   may  be  any command listed under Compound Commands above.

Il n'y a pas de raison, c'est juste la syntaxe.

Étant donné que la liste de la fonction d'une ligne donnée n'est pas terminée par un saut de ligne ou un ; , bash se plaint.

21voto

sep Points 56

La fin d'une commande unique (" ;") est impliquée par la nouvelle ligne. Dans la version à une ligne } est analysé en tant qu'argument de l'élément non terminé ls -a commande. Ce que vous pouvez voir si vous le faites :

$ foo(){ echo "a" }
}
$ foo
a }

Vous voyez comment la commande à l'intérieur de la déclaration de la fonction avale l'accolade qui la suit ?

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X