capturer la sortie de la command sans interférence

Comment puis-je tester si la sortie d'une command est une string vide sans interférer avec cette sortie? Exemple:

command | ??? if [ $? = 0 ] && [ -n "$output_from_command"]; then ... 

Je voudrais que la sortie du code ci-dessus soit la même que lors de l'exécution de la command .

Vous pouvez utiliser la command tee , qui accepte les inputs de stdin et écrit la sortie dans stdout plus un file.

 command | tee /tmp/out.$$ 

Ensuite, vous pouvez tester /tmp/out.$$ pour voir s'il est de longueur nulle ou non. (Notez que $$ s'étend au pid actuel, ce qui évite que des process similaires ne se superposent.)

Cela semble fonctionner:

 #!/bin/bash OUTPUT="$(echo "foo")" # replace 'echo "foo"' with your command if [[ -z "$OUTPUT" ]]; then echo "No output." else echo "$OUTPUT" fi 
 if the-command | grep '^'; then echo the-command output was not empty fi 

(notez que le comportement variera selon les implémentations grep si la sortie de the-command n'est pas du text (contient des caractères NUL, ne se termine pas par un caractère newline ou a des lignes anormalement longues).