Combien de façons existe-t-il au total pour alimenter une commande avec une entrée?

9

La première chose que j'ai remarquée à propos de Linux a été les différentes manières d'alimenter des données dans une commande, j'en connais quelques-unes mais je ne sais pas combien il y en a au total.

les moyens que je connais jusqu'à présent:

tuyauterie:

echo -e "zorro\nwurst\nlahmacun\nsozialhilfe" | sort

à partir du clavier avec signal de fin de fichier:

sort
>gurken
>zucker
>braunkohle

du fichier:

sort foo

ICI chaîne (en fait appelée document ICI):

sort << HERE
>wasserkopf
>elternzeit
>schuldeingeständnis
>währungsreform
>alabasterhaut
HERE

Est-ce tout ou y a-t-il d'autres façons de le faire, pourquoi y a-t-il des façons différentes, certaines sont-elles redondantes?

sharkant
la source

Réponses:

9

Au moins les éléments suivants:

  1. Options de commande: foo --bar

  2. Entrée standard: foo | baroubar < foo

  3. Fichier (s): foo *.*(ou en ouvrant le (s) fichier (s) via le code foo) †

  4. Exportation d'environnement: export foo=bar; baz

  5. Environnement (sans exportation): foo=bar bazouenv foo=bar baz

  6. ICI doc: foo << EOF bar EOF

  7. ICI chaîne: foo <<< bar

  8. Signaux kill -SIGUSR1 $procid

  9. Une grande variété de communications inter-processus , telles que sockets, TCP, fichiers mappés en mémoire

† oui, je me rends compte que stdin est un fichier (ou semblable à un fichier). Et que passer des fichiers comme celui-ci est vraiment la même chose que passer des options

Neil McGuigan
la source
1
Vous pouvez ajouter foo < barune variante supplémentaire (fichier via stdin)
Hagen von Eitzen
14

Pour commencer, sort << HEREet ainsi de suite n'est pas une chaîne ici. C'est un document ici. La chaîne ici utilise l' <<<opérateur. C'est en bash (et quelques autres coquilles).

En général, il y a deux façons. L'un se fait par l'entrée standard (et les redirections), et l'autre par les paramètres.

  1. Entrée standard et ses redirections

    Il s'agit du flux qui est par défaut connecté au terminal, dans lequel une commande s'exécute et est associé à fd (descripteur de fichier) 1. Il alimente tout ce qui est tapé sur le terminal. Bien qu'il (l'entrée) puisse être redirigé comme dans l'utilisation du tube |ou en utilisant les documents ici ou les chaînes ici. Ensuite, l'entrée ne provient pas du terminal, mais est attachée à la sortie standard de la commande précédant le canal. Différents shells ont des redirections différentes, donc pour cette catégorie, vous devriez vérifier la documentation du shell. Recherchez les redirections d'entrée.

  2. Paramètres

    C'est ce que représente votre exemple sort foo. En appelant un programme ou une fonction vous lui passez un ou plusieurs paramètres. Un fichier local n'est qu'une possibilité. Le paramètre peut contenir une URL ou autre. Les options ici sont infinies.

Pour résumer, il existe deux façons générales:

  • le premier résume la logique interne de l'application et manipule l'entrée standard au niveau OS / shell,

  • tandis que le second implique les entrailles de l'application, et ce sont eux qui offrent des possibilités illimitées, en se basant sur les paramètres d'appel comme interface.

Dans les deux cas, la réponse est qu'il n'y a pas de limites. Bien que les limites réelles viennent avec l'OS / shell et l'application elle-même.

Kusalananda
la source