Supongamos que tengo un archivo bash llamado myBash.bash
. Reside en:
/myDirect/myFolder/myBash.bash
Ahora quiero usar la cadena /myDirect/myFolder
(la ubicación de myBash.bash
) dentro del script. ¿Hay algún comando que pueda usar para encontrar esta ubicación?
Editar: La idea es que quiero configurar una carpeta zip con código que pueda iniciarse mediante un script bash dentro de ese archivo zip. Sé las rutas de archivo relativas del código dentro de ese archivo zip, pero no las rutas absolutas, y las necesito. Una forma sería codificar en la ruta, o requerir que la ruta del archivo se proporcione como una variable. Sin embargo, me resultaría más fácil si fuera posible que el archivo bash descubriera dónde está solo y luego cree las rutas relevantes al otro archivo a partir de su conocimiento de la estructura del archivo zip.
fuente
Respuestas:
Puede obtener la ruta completa como:
Y como señaló Serg , puede usar
dirname
para quitar el nombre de archivo como esteo incluso mejor para evitar citas incómodas y división de palabras con nombres de archivo difíciles:
Mucho mejor que mi idea anterior de analizarlo (¡sabía que habría una mejor manera!)
Notas
realpath
devuelve la ruta real de un archivo$0
es este archivo (el script)s|old|new|
reemplazarold
connew
\(.*\)/
guardar cualquier personaje antes/
para más tarde\1
la parte guardadafuente
$0
ysed
magia. Pero dichased
magia es realmente innecesaria cuandodirname
existen herramientas como estarealpath
:realpath "$( dirname $0 )"
Yo personalmente usaríareadlink
pero ese soy yo:readlink -e $(dirname $0)
dirname "$(realpath "$0")"
sería mejor? Por lo general, se desea conocer el directorio principal del archivo referenciado en lugar del directorio principal del enlace simbólico que hace referencia a dicho archivo."$(dirname "$(realpath "$0")")"
es la forma más sencilla. Las citas dentro del$()
trabajo son normales.$()
ser un subshell permitirá tener citas fuera. Sin embargo, no diría que es tan sencillo, a menos que uno se dé cuenta de que$()
todos son subcapassi el script está en tu camino, puedes usar algo como
EDITAR: después de leer los comentarios de Serg, esta podría ser una solución genérica que funciona si el script está en su camino o no.
fuente
which
es más adecuado para cuando el script reside en uno de los directorios que forman parte de laPATH
variable. Úselo$0
desde un guión, tal como lo muestra Zanna. Pero su respuesta es correcta ya que usa endirname
lugar de meterse consed
, por lo tanto, +1 para esoLa respuesta aceptada parece perfecta. Aquí hay otra forma de hacerlo:
/bin/pwd
imprime la ruta real del directorio, a diferencia delpwd
comando incorporado.fuente
Se toma como referencia de kenorb y andro.
No dirname, readlink, realpath, BASH_SOURCE
Todos son incorporados
fuente