Quanti modi ci sono in totale per alimentare un comando con input?


9

La prima cosa che ho notato di Linux sono i diversi modi di inserire i dati in un comando, ne conosco alcuni ma non so quanti ce ne siano in totale.

i modi che conosco finora:

tubazioni:

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

dalla tastiera con segnale di fine file:

sort
>gurken
>zucker
>braunkohle

dal file:

sort foo

Stringa QUI (attualmente denominata documento QUI):

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

È tutto o ci sono altri modi per farlo, perché ci sono modi diversi, sono in qualche modo ridondanti?

Risposte:


9

Almeno quanto segue:

  1. Opzioni di comando: foo --bar

  2. Input standard: foo | barobar < foo

  3. File: foo *.*(o aprendo i file tramite il codice in foo) †

  4. Esportazione ambientale: export foo=bar; baz

  5. Ambiente (senza esportazione): foo=bar bazoenv foo=bar baz

  6. QUI doc: foo << EOF bar EOF

  7. QUI stringa: foo <<< bar

  8. segnali kill -SIGUSR1 $procid

  9. Un'intera varietà di comunicazioni tra processi , come socket, TCP, file mappati in memoria

† sì, mi rendo conto che stdin è un file (o file-like). E che il passaggio di file come questo è davvero lo stesso del passaggio di opzioni


1
Puoi aggiungere foo < baruna variante aggiuntiva (file tramite stdin)
Hagen von Eitzen,

14

Per cominciare, sort << HEREe così via non è una stringa qui. Questo è un documento qui. La stringa qui utilizza l' <<<operatore. Questo è in bash (e alcune altre shell).

In generale, ci sono due modi. Uno è tramite input standard (e reindirizzamenti) e l'altro tramite parametri.

  1. Input standard e reindirizzamenti

    Questo è lo stream che è per impostazione predefinita collegato al terminale, in cui viene eseguito un comando ed è associato a fd (descrittore di file) 1. Viene alimentato tutto ciò che viene digitato sul terminale. Sebbene (l'input) possa essere reindirizzato come usando la pipe |o usando i documenti here o qui-stringhe. Quindi l'input non proviene dal terminale, ma è collegato all'output standard del comando che precede la pipe. Diverse shell hanno reindirizzamenti diversi, quindi per questa categoria è necessario controllare la documentazione della shell. Cerca reindirizzamenti di input.

  2. parametri

    Questo è ciò che nel tuo esempio è sort foo. Chiamando un programma o una funzione si passa uno o più parametri. Un file locale è solo una possibilità. Il parametro potrebbe contenere un URL o altro. Le opzioni qui sono infinite.

Per riassumere, ci sono due modi generali:

  • il primo si sottrae dalla logica interna dell'applicazione e manipola l'input standard a livello di sistema operativo / shell,

  • mentre il secondo riguarda le viscere dell'applicazione, ed è loro che offrono possibilità illimitate, basandosi sui parametri di chiamata come interfaccia.

Per entrambi i modi la risposta è che non ci sono limiti. Sebbene i limiti attuali vengano forniti con il sistema operativo / shell e l'applicazione stessa.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.