Usando echo; ¿Cuál es la diferencia entre> y >>

Me encontré con esto en un sitio de Git:

mkdir log echo '*.log' > log/.gitignore git add log echo tmp >> .gitignore git add .gitignore git commit -m "ignonetworking log files and tmp dir" 

Entonces, en la primera instancia de echo, estamos escribiendo la cadena para el file .gitignore en el directory de logging. En la segunda instancia, estamos escribiendo tmp en el file .gitignore (en el directory actual). ¿Por qué tenemos que usar >> contra>?

Cuando se hace eco de algo en un file, >> agrega al file y > sobrescribe el file.

 ➜ ~ echo foobar > test ➜ ~ cat test foobar ➜ ~ echo baz >> test ➜ ~ cat test foobar baz ➜ ~ echo foobar > test ➜ ~ cat test foobar 

Del ejemplo que publicó, se crea un directory de logging y luego *.log se coloca en log/.gitignore para que ningún file de logging se comprometa con git. Como se usó > , si hubiera existido un file .gitignore, se sobrescribirá con solo *.log .

El directory de logging en sí mismo se agrega a su etapa local de git.

En la siguiente línea, se agrega >> para que tmp se anexe al final del file .gitignore en lugar de sobrescribirlo. Luego se agrega al área de ensayo.

> es un operador de networkingirección. < > >| << >> <& >& <<- <> < > >| << >> <& >& <<- <> son todos operadores de networkingirección en el intérprete de commands de shell.

En sus ejemplos, esencialmente > sobrescribe y >> anexa.

Vea man sh , (desde su terminal puede acceder al manual a través de man sh ).

 Redirections Redirections are used to change where a command reads its input or sends its output. In general, networkingirections open, close, or duplicate an existing reference to a file. The over‐ all format used for networkingirection is: [n] networkingir-op file where networkingir-op is one of the networkingirection operators mentioned previously. Following is a list of the possible networkingirections. The [n] is an optional number, as in '3' (not '[3]'), that refers to a file descriptor. [n]> file Redirect standard output (or n) to file. [n]>| file Same, but override the -C option. [n]>> file Append standard output (or n) to file. [n]< file Redirect standard input (or n) from file. [n1]<&n2 Duplicate standard input (or n1) from file descriptor n2. [n]<&- Close standard input (or n). [n1]>&n2 Duplicate standard output (or n1) to n2. [n]>&- Close standard output (or n). [n]<> file Open file for reading and writing on standard input (or n). The following networkingirection is often called a "here-document". [n]<< delimiter here-doc-text ... delimiter All the text on successive lines up to the delimiter is saved away and made available to the command on standard input, or file descriptor n if it is specified. If the delimiter as specified on the initial line is quoted, then the here-doc-text is treated literally, other‐ wise the text is subjected to parameter expansion, command substitution, and arithmetic expansion (as described in the section on "Expansions"). If the operator is "<<-" instead of "<<", then leading tabs in the here-doc-text are stripped.