GNU/Linux >> Tutoriales Linux >  >> Linux

¿Cómo maneja Linux múltiples separadores de rutas consecutivas (/home////username///file)?

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

Pregunto porque me ahorrará varias líneas de código para buscar / adicionales s mientras se 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 importante usar múltiples / s en un camino

Respuesta aceptada:

Se permiten múltiples barras y son equivalentes a una sola barra. De la especificación Single Unix (versión 4), definiciones básicas §3.271 nombre de ruta:"Múltiples barras inclinadas sucesivas se consideran lo mismo que una barra inclinada".

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

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

Para programas que actúan sobre una entrada de directorio, si foo es un enlace simbólico a un directorio, luego pasa 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 solo a la resolución de nombres de ruta, es decir, al acceder a archivos. Las manipulaciones de nombres de archivo pueden funcionar de manera diferente. Por ejemplo basename y dirname ignorar las barras inclinadas finales.


Linux
  1. Bash =~ Regex y Https://regex101.com/?

  2. ¿Cómo saber desde qué carpeta se está ejecutando un proceso?

  3. unix:///var/run/supervisor.sock no hay tal archivo

  4. Linux:diferencia entre /dev/console, /dev/tty y /dev/tty0

  5. Cómo cambiar el valor predeterminado /tmp a /home/user/tmp

Linux:¿Diferencia entre /dev/console, /dev/tty y /dev/tty0?

¿Qué tan portátiles son /dev/stdin, /dev/stdout y /dev/stderr?

Linux – ¿Fusionar /usr/bin y /usr/sbin en /bin (gnu/linux)?

Kubuntu muestra un error al iniciar sesión (file:///usr/share/sddm//themes/breeze/main.qml:no such file or directory)?

Comprender los archivos /proc/mounts, /etc/mtab y /proc/partitions

¿Deberían vivir los sitios web en /var/ o /usr/ según el uso recomendado?