Pregunta:
Para un comando, si usa -
como argumento en lugar de un nombre de archivo significará STDIN o STDOUT.
-
Pero en este ejemplo, crea un archivo con el nombre
-
:echo hello > -
¿Cómo puedo hacer
-
en este ejemplo significa STDOUT? -
Por el contrario, ¿cómo puedo hacer
-
decir, un archivo con nombre-
en ejemplos como:cat -
Respuesta:
Usar -
como nombre de archivo para significar stdin / stdout es una convención que usan muchos programas. No es una propiedad especial del nombre de archivo. El kernel no reconoce -
como especial, por lo que cualquier llamada al sistema que se refiera a -
como un nombre de archivo usará -
literalmente, como el nombre de archivo.
Con la redirección de bash, -
no se reconoce como un nombre de archivo especial, por lo que bash lo usará como el nombre de archivo literal.
Cuando cat
ve la cadena -
como nombre de archivo, se lo trata como un sinónimo de la entrada estándar. Para evitar esto, debe modificar la cadena que ve cat
de tal manera que todavía se refiera a un archivo llamado -
. La forma habitual de hacer esto es prefijar el nombre del archivo con una ruta – ./-
, o /home/Tim/-
. Esta técnica también se utiliza para solucionar problemas similares en los que las opciones de la línea de comandos chocan con los nombres de archivo, por lo que un archivo denominado ./-e
no aparece como la opción de línea de comando -e
en un programa, por ejemplo.