directory – ¿Cómo maneja Linux múltiples separadores de ruta consecutivos (/ home //// nombre de usuario /// archivo)?

Pregunta:

Estoy trabajando en una secuencia de comandos de Python que pasa las ubicaciones de los archivos a un subproceso de scp. Todo está bien, pero estoy en una situación en la que puedo terminar concatenando una ruta con un nombre de archivo tal que haya un doble ' / en la ruta. Sé que a bash no le importa si tiene varios separadores de archivos, pero me pregunto cómo se rectifica exactamente. ¿Es bash lo que quita extra / s o realmente no importa nunca?

Lo pregunto porque me ahorrará varias líneas de código para verificar si hay extra / s mientras concatena. Sé que no es gran cosa, pero también tengo curiosidad. Tengo un script bash que tiene la línea cd //usr (en lugar de cd /usr ), lo que parece implicar que podría ser significativo el uso de múltiples / s en una ruta

Respuesta:

Se permiten varias barras y equivalen a una sola barra. De la especificación Single Unix (versión 4) , definiciones base §3.271 ruta de acceso : "Varias barras sucesivas se consideran iguales a una barra".

Hay una excepción: si un nombre de ruta comienza con dos caracteres de barra diagonal sucesivos, el primer componente que sigue a los caracteres de barra inicial puede interpretarse de una manera definida por la implementación. (ref: definiciones base §4.13 resolución de nombre de ruta ). Linux en sí no hace esto, aunque algunas aplicaciones sí lo hacen, y otros sistemas Unix-ish sí lo hacen (por ejemplo, Cygwin).

Un / al final de un nombre de ruta obliga al nombre de ruta a hacer referencia a un directorio. En ( POSIX 1003.1-2001 (Single Unix v4) definiciones base §4.11 resolución de nombre de ruta , una / final es equivalente a una /. final /. Definiciones base POSIX 1003.1-2008 (Single Unix v4) §4.13 elimina el requisito de hacerlo equivalente a /. , con el fin de hacer frente a directorios no existentes (por ejemplo, se requiere mkdir foo/ para funcionar, mientras que mkdir foo/. no lo haría – ver la justificación del cambio).

Para los programas que actúan sobre una entrada de directorio, si foo es un enlace simbólico a un directorio, pasar foo/ es una forma de hacer que el programa actúe sobre el directorio en lugar del enlace simbólico.

¹ Tenga en cuenta que esto se aplica únicamente a la resolución de nombres de ruta, es decir, al acceder a archivos. Las manipulaciones de nombre de archivo pueden funcionar de manera diferente. Por ejemplo, el basename y el basename dirname ignoran las barras inclinadas.

Leave a Comment

Your email address will not be published. Required fields are marked *

web tasarım