Nuestro grupo de redactores ha pasado mucho tiempo investigando para dar resolución a tu pregunta, te dejamos la resolución por eso nuestro objetivo es serte de gran apoyo.
Solución:
Utilizando -
como un 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 núcleo no reconoce -
como especial por lo que cualquier llamada del sistema se refiere a -
como nombre de archivo se utilizará -
literalmente como el nombre del archivo.
Con la redirección bash, -
no se reconoce como un nombre de archivo especial, por lo que bash lo usará como el nombre de archivo literal.
Cuándo cat
ve el string -
como nombre de archivo, lo trata como un sinónimo de stdin. Para evitar esto, necesita modificar el string ese cat
ve de tal manera que todavía se refiere a un archivo llamado -
. La forma habitual de hacer esto es prefix 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 el -e
opción de línea de comando a un programa, por ejemplo.
-
En vez de
echo hello > -
puedes usarecho hello > /dev/stdout
.Si bien ‘-‘ es una convención que debe implementar cada programa que desee admitirlo,
/dev/stdin
,/dev/stdout
y/dev/stderr
son, cuando son compatibles con el sistema operativo (al menos, Solaris, Linux y BSD lo hacen), independientes de la aplicación y luego funcionarán como usted pretende.
Como mencionó Camh, -
es solo una convención de nomenclatura utilizada por algunos programas. Si desea referirse a estos flujos con un descriptor de archivo que el shell reconocerá, jiliagre tenía razón al pedirle que usara el nombre /dev/stdin
o /dev/stdout
en lugar de. Esos nombres de archivo deberían funcionar en cualquier lugar donde funcionaría un nombre de archivo normal.
-
Dicho esto, tu primer ejemplo es un poco tonto. Cualquier salida que sería capturada por el operador de redirección para escribir en un archivo ya está activada como salida estándar, por lo que redirigirla y volver a escribirla de donde proviene es inútil. El comportamiento que usa allí es la tubería, no una redirección:
echo hello |
-
En su segundo ejemplo, simplemente necesita dar alguna indicación de que desea un archivo literal con ese nombre, no el alias interno que tiene. Puede hacerlo más fácilmente especificando una ruta al archivo como esta:
cat ./-
Agradecemos que quieras añadir valor a nuestra información tributando tu veteranía en las ilustraciones.