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.touches 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,> foofuncionará como espera. En zsh, por defecto,> foofunciona comocat > foo: zsh espera a que escriba la entrada.fuente
>> filey,touch filepero sifileno existe, existe una gran diferencia entre ambos y> file(en el sentido de quefilese pierden los contenidos anteriores ). Eso, más el comportamiento inconsistente de zsh significa quetouch filees el "más seguro" y, por lo tanto, debe memorizarse como La forma correcta de hacerlo.Aquí hay una comparación interesante:
Resultado:
fuente
stracese supone que muestra las llamadas del sistema que se están ejecutando, y> file.txtse 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 questraceescribe parastderrtransmitir 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 elvicaso, donde obtengo aproximadamente el mismo valor