Ce que vous voyez est ce que vous obtenez, vraiment. Tout ce qui a été imprimé après avoir lancé ls
a été imprimé par la commande 'ls' elle-même - il y avait pas de valeur de retour intermédiaire qui a dû être reformatée.
Shell ne sont pas exactement comme les fonctions des langages de programmation - elles ne peuvent pas retourner autre chose qu'un seul entier : le " statut de sortie ". La plupart des shells permettent d'inspecter cette valeur par le biais de la fonction $?
variable. (La convention est de retourner 0 en cas de succès ; 1 ou plus en cas d'échec).
Ainsi, toutes les sorties que vous voyez sont produites non pas par une valeur de retour, mais en écrivant du texte ordinaire dans des fichiers spéciaux appelés "stdout" et "stderr". pendant l'exécution de la commande (la première est destinée à la sortie normale, la seconde aux avis et aux messages d'erreur).
Bien sûr, à l'intérieur de le programme 'ls', vous trouverez des appels à des fonctions de la libc telles que readdir() qui renvoie un fichier struct dirent
ou stat() qui renvoie un struct stat
. Cependant, aucun d'entre eux n'est renvoyé dans le monde extérieur.
Vous pouvez donc utiliser la sortie de 'ls' ? Dans un sens, oui, en fait, une grande partie de l'interface utilisateur "Unix" traditionnelle est construite sur l'idée d'utiliser la sortie d'un programme comme entrée d'un autre programme - c'est ce que fait la fonction "ls". |
opérateur de tuyaux est pour. Cependant, gardez à l'esprit que la sortie de 'ls' est spécifiquement formatée pour la consommation humaine et est pas facilement analysable par une machine. En d'autres termes, vous ne devrait pas utiliser la sortie de 'ls' dans scripts même si vous le pouvez.
(La tuyauterie fonctionne mieux lorsque le programme initial a été écrit pour produire une sortie quelque peu structurée. C'est la raison pour laquelle de nombreux outils peuvent être exécutés avec des options permettant de produire un texte bien formaté. または texte analysable par une machine. Comparez lsblk
vs lsblk --raw
vs lsblk --json
.)
Il existe des exceptions - certains shells ont tenté de prendre en charge des types de retour flexibles, mais PowerShell est le seul exemple largement connu. Les cmdlets PowerShell peuvent renvoyer des types .NET Runtime arbitraires.