Voici un script shell: Lorsque cela est appelé, il imprime les éléments suivants: p> test-util << EOF | myfunc
input for test #1
EOF
test-util << EOF | myfunc
input for test #2
EOF
echo "Passed: $PASSED, failed: $FAILED"
3 Réponses :
tuyauter quelque chose dans Si vous avez vraiment besoin de la modification de la valeur, vous devez retourner une valeur de la fonction et vérifier $ pipestatus après, je suppose , comme ceci: p> myfunc code> dans
sh code> ou
bash code> provoque une nouvelle coquille de reproduire. Vous pouvez le confirmer en ajoutant un long sommeil dans
myfunc code>. Bien que cela dort, appelez PS et vous verrez un sous-processus. Lorsque la fonction renvoie, cette sous-shell sort sans modifier la valeur dans le processus parent.
Frais. Je ne savais pas sur Pipestatus Code> avant.
Le seul problème avec cette technique est que votre valeur de retour doit être comprise entre 0 et 255.
Korn Shell donne les mêmes résultats que ZSH, au fait.
Merci pour le lien! La question est de passer à deux variables: $ passée et $ a échoué. Je comprends que je peux rechercher $?, Si cela équivaut à zéro - incrément $ passée par mystérique, sinon - incrément $ échoué. Je voudrais juste aussi petit code que possible en dehors de la myfunc ().
@zserge: une solution serait comme ceci: myfunc () {echo "deux mots"; }; Lire Word1 Word2 <<< $ (myfunc) code> ou
array = ($ (myfunc)) code>.
Le problème est "Quelle extrémité d'un pipeline utilisant des intégrées est exécutée par le processus d'origine?"
Dans ZSH, on dirait que la dernière commande du pipeline est exécutée par le script shell principal lorsque la commande est une fonction ou intégrée. p>
en bash (et sh est susceptible d'être un lien pour baster si vous êtes sous Linux), alors que les deux commandes sont exécutées dans une sous-coquille ou la première commande. est exécuté par le processus principal et les autres sont exécutés par des sous-coquilles. P>
Clairement, lorsque la fonction est exécutée dans une sous-coque, elle n'affecte pas la variable dans la coque mère (uniquement le monde Dans la sous-coquille). P>
envisagez d'ajouter un test supplémentaire: p>
Avez-vous lu: tldp.org/ldp/abs/html/localvar.html?
Eh bien, à mon esprit $ GLOBVAR n'est pas une variable locale, car appeler myfunc () sans pipes augmente la variable globale $ GLOBVAR. Le problème est que la fonction d'appel sur le tuyau ne fonctionne pas dans Bash / sh.