Soy nuevo en Linux. Cuando creo un nuevo archivo .gitignore en el directorio actual usando bash, descubrí que puedo hacer:
> .gitignore
o
touch .gitignore
Parece que hacen lo mismo. Cuando reviso el manual touch
, dice cambio de marca de tiempo para el archivo actual, pero no hay manual para >
. Entonces, ¿alguien puede explicar qué puede >
hacer y hay alguna diferencia en el uso de estos dos comandos en este contexto? Gracias.
command-line
Steve Deng Zishi
fuente
fuente
man bash
. Es un documento largo y tomará días o incluso semanas para entenderlo bien, pero vale la pena leerlo si quieres aprender Bash a fondo.Respuestas:
>
es el operador de redirección de shell. Consulte ¿Cuál es la diferencia entre ">" y ">>" en el comando de shell? y ¿ Cuándo debo usar <o <() o << y> o> ()? Se utiliza principalmente para redirigir la salida de un comando a un archivo. Si el archivo no existe, el shell lo crea. Si existe, el shell lo trunca (lo vacía). Simplemente> file
, no hay ningún comando, por lo que el shell crea un archivo, pero no se le envía ningún resultado, por lo que el efecto neto es la creación de un archivo vacío o el vaciado de un archivo existente.touch
es un comando externo que crea un archivo o actualiza la marca de tiempo, como ya sabe. Contouch
, el contenido del archivo no se pierde, si existe, a diferencia de>
.El comportamiento de
>
depende del shell. En bash, dash y la mayoría de los shells,> foo
funcionará como espera. En zsh, por defecto,> foo
funciona comocat > foo
: zsh espera a que escriba la entrada.fuente
>> file
y,touch file
pero sifile
no existe, existe una gran diferencia entre ambos y> file
(en el sentido de quefile
se pierden los contenidos anteriores ). Eso, más el comportamiento inconsistente de zsh significa quetouch file
es el "más seguro" y, por lo tanto, debe memorizarse como La forma correcta de hacerlo.Aquí hay una comparación interesante:
Resultado:
fuente
strace
se supone que muestra las llamadas del sistema que se están ejecutando, y> file.txt
se muestra que el método es la menor cantidad de llamadas del sistema ejecutadas, lo que realmente no es tan sorprendente: cuanto más compleja es una herramienta, más complejas son sus llamadas al sistema. Sin embargo, el problema con los ejemplos que se muestran es questrace
escribe parastderr
transmitir de forma predeterminada, y en esta respuesta Steven usa la pipa para leer solostderr
, así que estoy un poco confundido sobre cómo contó las líneas usando la|
pipa y no|&
|&
, como menciona @Serg, obtengo recuentos de aproximadamente una quinta parte de los que están aquí ... excepto por elvi
caso, donde obtengo aproximadamente el mismo valor