Me gustaría recuperar el nombre absoluto del archivo de script que se está ejecutando actualmente. Los enlaces también deberían resolverse.
En Linux, esto parece hacerse así:
$(readlink -mn "$0")
pero readlink
parece funcionarmuyde forma diferente en Mac OS X.
He leído que esto se hace usando
$(realpath $0)
en BSD pero eso tampoco funciona. Mac OS X no tiene realpath
.
¿Alguna idea?
Respuesta1
Hago trampa y uso Perl para esto mismo:
#!/bin/bash
dirname=`perl -e 'use Cwd "abs_path";print abs_path(shift)' $0`
echo $dirname
Uno pensaría que simplemente escribiría todo el guión en Perl, y a menudo lo hago, pero no siempre.
Respuesta2
#!/usr/bin/env bash
scriptDir="$(cd "$(dirname "$0")" && pwd -P)"
Respuesta3
Esto maneja combinaciones de enlaces simbólicos y funciona en archivos y carpetas:
#!/usr/bin/env bash
realpath()
{
if ! pushd $1 &> /dev/null; then
pushd ${1##*/} &> /dev/null
echo $( pwd -P )/${1%/*}
else
pwd -P
fi
popd > /dev/null
}
Pero no es compatible con --relative-to de realpath. Esto requeriría la conversión descrito aquí.
Respuesta4
Otro enfoque:
# Install.
brew install coreutils
# Use the GNU variant.
grealpath --help