¿Cómo ejecutar un archivo ejecutable desde un directorio diferente sin cd ni modificar la RUTA?

¿Cómo ejecutar un archivo ejecutable desde un directorio diferente sin cd ni modificar la RUTA?

Existen variaciones similares a lo que quiero preguntar, pero no pude encontrar la pregunta exacta, así que la haré aquí.

Digamos que tengo un .carchivo compilado que da como resultado el ejecutable exque se encuentra como /mnt/f/C_F/ex. Puedo ejecutarlo muy bien desde dentro, /mnt/f/C_Fpero ./ex¿qué pasa si quiero hacerlo desde, /mnt/fpor ejemplo, (o desde cualquier directorio)? No quiero agregar /mnt/f/C_F/a PATH para esto.

No pude encontrar una solución y supongo que no es posible hacerlo. Por favor, confirme esto.

Respuesta1

Utilice una ruta absoluta a ese archivo.

/mnt/f/C_F/ex

Esto siempre debería funcionar independientemente de su directorio de trabajo actual. En general, probablemente debería preferir rutas absolutas dentro de los scripts por este motivo (aunque existen excepciones importantes).

Respuesta2

Siempre puedes usar la ruta relativa o completa a tu ejecutable.

Cuando estés dentro /mnt/f, puedes ejecutar:

C_F/ex
# or
/mnt/f/C_F/ex

Respuesta3

Cualquiercamino1 al archivo ejecutable que contiene al menos una /obra.La presencia de un /carácter en el nombre de un comando le dice al shell que le está pidiendo que ejecute un archivo específico y que está especificando el lugar específico donde se encontrará ese archivo. Esto es parte de la sintaxis que espera el shell; en la mayoría de los demás contextos es aceptable que las rutas (relativas) no contengan /caracteres.

Para un ejecutable que no está en el directorio actual,ese es cualquier camino hacia ello. No hay manera de escribir la ruta de un archivo en otro directorio sin usar al menos uno /. Esto hace que ejecutar archivos en otros directorios sea un caso más sencillo, aunque resulte menos familiar.

  • Caminos absolutos--como/mnt/f/C_F/ex--Empezar con /.

  • Caminos relativosa un archivo en otro directorio--C_F/excuando esté en el /mnt/fdirectorio, siempre contenga un /, aunque no esté al principio. Una ruta relativa sin a /es solo un nombre de archivo, que identifica un archivo en el directorio actual. (Sin embargo, lo contrario no es cierto. Una ruta relativa puede contener un /pero aún así hacer referencia a un archivo en el directorio actual; consulte a continuación).

    Tenga en cuenta que las rutas relativas deben hacer referencia al archivo que desea para que funcionen, y si una ruta relativa se refiere o no al archivo que desea.depende del directorio en el que te encuentres actualmente, ya que se resuelven en relación con el directorio actual.

Para un ejecutable queesEn el directorio actual, la ruta relativa más corta generalmente no funciona porque no contiene un archivo /. Por tanto, éste es el caso más complicado, aunque más familiar. Cuando estás en el directorio donde exse encuentra un ejecutable, no puedes simplemente ejecutarlo ex, aunque exsea una ruta relativa perfectamente buena a ese ejecutable.

La razón por la que no funciona es que un nombre de comando que no contiene a /no se trata como una ruta relativa ni como ninguna ruta. En cambio,se trata como un nombre de archivo y se buscaen los directorios enumerados en $PATH. 2

Es por eso que lo usas ./excuando estás en el mismo directorio que ex.Cada directorio contiene una .entrada que hace referencia al directorio mismo. Esteproporciona una maneraescribir una ruta relativa que identifique el mismo archivo expero que contenga un /y, por lo tanto, se pueda utilizar como un nombre de comando que el shell trata como una ruta.

Por lo tanto, un ./prefijo no es una sintaxis especial, sino simplemente la segunda forma más sencilla de escribir una ruta relativa a un archivo en el directorio actual, y la forma más sencilla de hacerlo de aquellas que contienen un archivo /.


1 En esta respuesta, uso "ruta" para significar "nombre de ruta". Este es el uso más común de "ruta", pero no el único. "Camino", como uso el término aquí, no debe confundirse con elruta de búsqueda ejecutable, que es la colección de directorios cuyas rutas se enumeran, separadas por :caracteres,en la $PATHvariable de entorno.

2 Los nombres de comandos que no contienen a /también se pueden resolver como comandos no externos, como comandos integrados y funciones del shell.

información relacionada