Je travaille sur un script bash que je voudrais travailler pour plusieurs types de VCS. Je pense à tester si un répertoire est un dépôt pour un système en exécutant une commande info typique et en vérifiant le code retour, le succès ou l'erreur. En pseudo code:
if a svn command succeded;
Then run svn commands
elif a darcs command succeded;
Then run darcs commands
elif a mercurial command succeded;
then run hg commands
else
something else
fi
Je peux exécuter une commande, par exemple
darcs show repo
et utiliser $?
pour obtenir son code retour.
Ma question est la suivante: existe-t-il un moyen efficace d'exécuter et de renvoyer le numéro de code de retour sur une seule ligne? par exemple
if [ 0 -eq `darcs show repo`$? ];
Ou dois-je définir une fonction?
Une exigence supplémentaire est que stderr et stdout soient imprimés.
la source
Comme d'autres l'ont déjà mentionné,
if command
teste si ellecommand
réussit. En fait,[ … ]
c'est une commande ordinaire, qui peut être utilisée en dehors d'uneif
ouwhile
conditionnelle bien qu'elle soit rare.Cependant, pour cette application, je testerais l'existence des répertoires caractéristiques. Ce sera correct dans plus de cas marginaux. Version Bash / ksh / zsh / dash (non testé):
la source
Eh bien, ce n'est pas très joli, mais c'est une façon de le faire en ligne:
Par définition, if teste le code de sortie d'une commande, vous n'avez donc pas besoin de faire une comparaison explicite, sauf si vous voulez plus que le succès ou l'échec. Il existe probablement une façon plus élégante de procéder.
la source
Une autre option succincte serait:
la source