bash - paso - scripts linux ejercicios resueltos
Determine la ruta de ejecuciĆ³n del script BASH (5)
Contribuido por Stephane CHAZELAS en cus Asumiendo shell POSIX:
prg=$0
if [ ! -e "$prg" ]; then
case $prg in
(*/*) exit 1;;
(*) prg=$(command -v -- "$prg") || exit;;
esac
fi
dir=$(
cd -P -- "$(dirname -- "$prg")" && pwd -P
) || exit
prg=$dir/$(basename -- "$prg") || exit
printf ''%s/n'' "$prg"
Posible duplicado:
¿Puede un script Bash decir en qué directorio está almacenado?
En un script de comandos de Windows, uno puede determinar la ruta del directorio del script que se está ejecutando actualmente usando %~dp0
. Por ejemplo:
@echo Running from %~dp0
¿Cuál sería el equivalente en un script de BASH ?
El código de Vlad está sobrecomprimido. Debiera ser:
MY_PATH=`dirname "$0"`
MY_PATH=`( cd "$MY_PATH" && pwd )`
Para la ruta relativa (es decir, el equivalente directo de Windows '' %~dp0
):
MY_PATH="`dirname /"$0/"`"
echo "$MY_PATH"
Para la ruta absoluta y normalizada:
MY_PATH="`dirname /"$0/"`" # relative
MY_PATH="`( cd /"$MY_PATH/" && pwd )`" # absolutized and normalized
if [ -z "$MY_PATH" ] ; then
# error; for some reason, the path is not accessible
# to the script (e.g. permissions re-evaled after suid)
exit 1 # fail
fi
echo "$MY_PATH"
Suponiendo que escriba la ruta completa al script bash, use $0
y dirname
, por ejemplo:
#!/bin/bash
echo "$0"
dirname "$0"
Ejemplo de salida:
$ /a/b/c/myScript.bash
/a/b/c/myScript.bash
/a/b/c
Si es necesario, agregue los resultados de la variable $PWD
a una ruta relativa.
EDITAR: Se agregaron comillas para manejar caracteres espaciales.
echo Running from `dirname $0`