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
dirnamepara 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
realpathdevuelve la ruta real de un archivo$0es este archivo (el script)s|old|new|reemplazaroldconnew\(.*\)/guardar cualquier personaje antes/para más tarde\1la parte guardadafuente
$0ysedmagia. Pero dichasedmagia es realmente innecesaria cuandodirnameexisten herramientas como estarealpath:realpath "$( dirname $0 )"Yo personalmente usaríareadlinkpero 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
whiches más adecuado para cuando el script reside en uno de los directorios que forman parte de laPATHvariable. Úselo$0desde un guión, tal como lo muestra Zanna. Pero su respuesta es correcta ya que usa endirnamelugar de meterse consed, por lo tanto, +1 para esoLa respuesta aceptada parece perfecta. Aquí hay otra forma de hacerlo:
/bin/pwdimprime la ruta real del directorio, a diferencia delpwdcomando incorporado.fuente
Se toma como referencia de kenorb y andro.
No dirname, readlink, realpath, BASH_SOURCE
Todos son incorporados
fuente