É assim que sua função imaginária pode parecer materializada:
abs () {
local _PWD _BN
[ -d "${1}" ] && _PWD="${1}"
[ -f "${1}" ] && { _PWD=$(dirname "${1}") ; _BN=/$(basename "${1}") ;}
pushd $_PWD >/dev/null
echo $(pwd)${_BN}
popd >/dev/null
}
Você pode passar o caminho do arquivo ou diretório como parâmetro. Em seguida, ele irá para o caminho especificado e imprimirá o diretório de trabalho, e é isso que você deseja. Você pode querer adicionar algumas validações em relação a parâmetros vazios, caminhos inexistentes ou permissões insuficientes, etc. de acordo com suas necessidades específicas - omiti isso neste exemplo.
o par pushd/popd
executa o salto para o alvo e volta
>/dev/null
impede que esses comandos imprimam na pilha de diretórios o que eles fazem por padrão e isso estragaria a saída desejada