Mi sono imbattuto in un comando proprio ora dato di seguito -
$ echo 'eval "$(jenv init -)"' >> ~/.bash_profile
Da quello che posso indovinare, è probabilmente usato per commettere i cambiamenti in .bash_profile ma a cosa serve esattamente?
Mi sono imbattuto in un comando proprio ora dato di seguito -
$ echo 'eval "$(jenv init -)"' >> ~/.bash_profile
Da quello che posso indovinare, è probabilmente usato per commettere i cambiamenti in .bash_profile ma a cosa serve esattamente?
Risposte:
Prima reindirizza lo stdout del programma >>
e lo aggiunge al file specificato dopo.
>> file command
echo a b >> c d
aggiungerebbe a b d
in un file chiamato c
.
>>
fare? Con >>
, si aggiunge l'output di un comando a un file.
Il tuo comando di esempio è composto da diverse parti, in pratica:
comando & Gt; & gt; nome del file
Quindi l'output di command
verrebbe aggiunto a filename
.
echo
? Nel tuo caso specifico, il echo "…"
comando invia i suoi argomenti di input a "stdout", che è il cosiddetto "descrittore di output standard". Gli argomenti di input a echo
sono seguiti da una nuova riga ( \n
), in modo da ottenere un'interruzione di riga.
Qui, un "descrittore di output standard" non è altro che un flusso di output che viene mostrato nella shell quando si esegue un comando. (Cioè, quando digiti echo foo
e premi Invio, foo\n
è l'output effettivo del echo
comando, che viene mostrato dalla shell come foo
seguito da una nuova riga.)
Fondamentalmente tutto ciò che scrive sulla riga di comando sta usando stdout. C'è anche un altro descrittore chiamato "stderr" che viene in genere utilizzato per i messaggi di errore. Sarà anche stampato come stdout, quindi a volte potrebbero essere intervallati. E c'è un descrittore di stdin che viene utilizzato per l'input. Vedere Questo articolo per maggiori informazioni.
Puoi sempre reindirizzare stdout a un descrittore di file, che puoi eseguire con uno di questi operatori:
>
reindirizza a un descrittore di file. Crea il file se non esiste o, se esiste già, tronca il file prima di scrivere. Il file verrà quindi sovrascritto con stdout.
>>
aggiunge un descrittore di file. Crea il file se non esiste.
Puoi anche reindirizzare lo stderr usando 2>
o 2>>
in modo simile. Oppure puoi combinare stderr e stdout in un unico file: 2>&1
lo fa Per maggiori informazioni sul reindirizzamento e alcuni altri esempi, puoi leggere questo piccolo tutorial .
In generale, puoi provare explainshell.com , che ti fornirà guida visuale e informazioni su un particolare comando di shell.
Per il TLDR persone a cui piace solo vedere un esempio;
L'output standard (non errori) del comando prima di & gt; & gt; verrà aggiunto alla fine del file chiamato dopo di esso.
Quindi se il file "flintstones.txt" contiene;
Fred
Barney
echo Dino >> flintstones.txt
risulterà in "Dino" aggiunto alla fine del file;
Fred
Barney
Dino
echo Dino > flintstones.txt
mostrare il contenuto sarebbe semplicemente Dino
se fatto con una singola freccia destra.
Di nuovo, se lo fai
> somefile.txt
L'intero contenuto del file verrà cancellato.
> file
cancella il file ma >> file
non fa nulla
man bash
è scritto con un linguaggio abbastanza formale, può essere difficile da capire. D'altra parte la frasebash >>
restituisce pochi link utili in Google. È vero che vogliamo aggregare la conoscenza senza fare affidamento su Google; per questo motivo anche una domanda con una risposta facilmente ricercabile può andare bene. Tuttavia il fatto che nessuno dei due ha fornito la risposta immediatamente (vedi Posso rispondere alla mia domanda? ) né indicato le risorse esistenti (che forse hai bisogno di aiuto per capire) indica una mancanza di ricerca.