Retourner une valeur unique à partir d'un script shell fonction
Exemple:
#!/bin/sh
a() {
R=f
ls -1 a*
[ "$?" == "1" ] && { R=t; }
echo $R
}
r=`a`
echo $r
$r
contient t
ou f
mais aussi la sortie de la ls
de commande.
Je peut écrire ls -1 a* >/dev/null 2>/dev/null
, mais si il y a un script plus complexe qui peut conduire à des erreurs.
Est-il possible de retourner une valeur unique de a()
?
r=$(a);echo $r
pourrait bien sûr être remplacé par seulement a
.
OriginalL'auteur PeterMmm | 2010-06-29
Vous devez vous connecter pour publier un commentaire.
Une coquille fonction peut retourner une valeur numérique. Envisager de 0 et de 1 au lieu de " f " et "t"
Ce sera toujours écrire la sortie de la
ls -1 a*
qui vous a probablement encore, vous désirez vous départir de, mais la valeur der
sera 0 ou 1) et de ne pas inclure la sortie.Les autres exemples de redirection de la sortie, soit à partir d'une ligne ou un bloc entier sont bonnes, et, comme d'autres l'ont suggéré, vous devriez apprendre à connaître d'autres façons de tester les conditions (mais j'étais en supposant que le
ls
était un exemple au hasard)$R
et il suffit d'exécuter lals
et puisreturn $?
?cette réponse est une modification de PeterMmm du script original de démontrer comment une coquille fonction peut renvoyer une valeur. Je suis sûr que toute cette exemple de fonction pourraient s'en passer, mais je ne sais pas ce qu'il pourrait faire dans son code réel.
OriginalL'auteur Stephen P
vous n'avez pas à utiliser
ls
pour vérifier les fichiers commençant para
. Suffit d'utiliser le shellOriginalL'auteur ghostdog74
Vous pouvez mettre une redirection sur une liste de commandes:
Si, à un certain point dans le script que vous ne voulez pas de sortie à partir de la suite de commandes, vous pouvez rediriger le shell de sortie avec la
exec
builtin:Noter que cela dure jusqu'à la fin du script, et pas seulement jusqu'à la fin d'une fonction. Cela prend en charge les commandes après l'intéressante mais pas avant.
Il y a un moyen d'annuler l'effet de
exec /dev/null
, en utilisant le descripteur de fichier manipulations. Je ne recommande pas nécessairement bien, parce qu'il peut être difficile de travailler dans la pratique. L'idée est de déplacer tout ce qui est connecté sur la sortie standard vers un autre descripteur, puis de rediriger la sortie standard dans un fichier différent, et enfin déplacer l'origine standard sortie standard sortie.OriginalL'auteur Gilles
Envisager l'utilisation de [ -f nomfichier ] et d'autres fichiers tests.
OriginalL'auteur jim mcnamara