¿De cuántas maneras hay en total para alimentar un comando con entrada?

9

Lo primero que noté sobre Linux fueron las diferentes formas de alimentar datos en un comando, conozco algunos pero no sé cuántos hay en total.

las formas que conozco hasta ahora:

tubería:

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

desde el teclado con señal de fin de archivo:

sort
>gurken
>zucker
>braunkohle

desde el archivo:

sort foo

HERE string (en realidad llamado documento AQUÍ):

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

¿Es todo esto o hay más formas de hacerlo? ¿Por qué hay diferentes formas? ¿Hay algunas formas redundantes?

Sharkant
fuente

Respuestas:

9

Al menos lo siguiente:

  1. Opciones de comando: foo --bar

  2. Entrada estándar: foo | barobar < foo

  3. Archivo (s): foo *.*(o abriendo archivo (s) a través del código en foo) †

  4. Exportación ambiental: export foo=bar; baz

  5. Medio ambiente (sin exportación): foo=bar bazoenv foo=bar baz

  6. AQUÍ doc: foo << EOF bar EOF

  7. AQUÍ cadena: foo <<< bar

  8. Señales kill -SIGUSR1 $procid

  9. Una gran variedad de comunicaciones entre procesos , como sockets, TCP, archivos mapeados en memoria

† sí, me doy cuenta de que stdin es un archivo (o similar a un archivo). Y que pasar archivos como este es realmente lo mismo que pasar opciones

Neil McGuigan
fuente
1
Puede agregar foo < barcomo una variante adicional (archivo vía stdin)
Hagen von Eitzen
14

Para empezar, sort << HEREy así sucesivamente no es una cadena aquí. Ese es un documento aquí. La cadena aquí utiliza el <<<operador. Eso está en bash (y algunas otras conchas).

En general, hay dos formas. Uno es a través de entrada estándar (y redirecciones), y el otro es a través de parámetros.

  1. Entrada estándar y sus redirecciones

    Este es el flujo que está conectado por defecto al terminal, en el que se ejecuta un comando y está asociado con fd (descriptor de archivo) 1. Se alimenta todo lo que se escribe en el terminal. Aunque se puede redirigir (la entrada) como al usar la tubería |o al usar los documentos aquí o las cadenas aquí. Entonces, la entrada no proviene del terminal, sino que se adjunta a la salida estándar del comando que precede a la tubería. Los diferentes shells tienen diferentes redirecciones, por lo que para esta categoría, debe consultar la documentación del shell. Busque redirecciones de entrada.

  2. Parámetros

    Esto es lo que en tu ejemplo es sort foo. Al llamar a un programa o una función, le pasa uno o más parámetros. Un archivo local es solo una posibilidad. El parámetro puede contener una URL o lo que sea. Las opciones aquí son infinitas.

En resumen, hay dos formas generales:

  • el primero se extrae de la lógica interna de la aplicación y manipula la entrada estándar en el nivel del sistema operativo / shell,

  • mientras que el segundo involucra las entrañas de la aplicación, y son ellas las que ofrecen posibilidades ilimitadas, basándose en los parámetros de llamada como una interfaz.

En ambos sentidos, la respuesta es que no hay límites. Aunque los límites reales vienen con el sistema operativo / shell y la aplicación en sí.

Kusalananda
fuente