Pregunta Obtener el nombre del directorio actual (sin la ruta completa) en un script Bash


¿Cómo obtendría solo el nombre actual del directorio de trabajo en un script bash, o mejor aún, solo un comando de terminal?

pwd proporciona la ruta completa del directorio de trabajo actual, p. /opt/local/bin pero solo quiero bin


616
2017-09-03 03:11


origen


Respuestas:


No hay necesidad de basename, y especialmente no hay necesidad de una subshell corriendo pwd (que agrega una operación de horquilla extra y costosa); el shell puede hacer esto internamente expansión de parámetros:

result=${PWD##*/}          # to assign to a variable

printf '%s\n' "${PWD##*/}" # to print to stdout
                           # ...more robust than echo for unusual names
                           #    (consider a directory named -e or -n)

printf '%q\n' "${PWD##*/}" # to print to stdout, quoted for use as shell input
                           # ...useful to make hidden characters readable.

860
2017-09-03 03:21



Utilizar el basename programa. Para su caso:

% basename "$PWD"
bin

190
2017-09-03 03:13



$ echo "${PWD##*/}"

1.


110
2017-09-03 03:23



Puedes usar una combinación de pwd y basename. P.ej.

#!/bin/bash

CURRENT=`pwd`
BASENAME=`basename "$CURRENT"`

echo "$BASENAME"

exit;

20
2017-09-03 03:20



¿Qué tal grep:

pwd | grep -o '[^/]*$'

10
2018-03-03 19:31



muy simple

pwd | xargs basename

8
2017-08-10 22:31



Me gusta la respuesta seleccionada (Charles Duffy), pero tenga cuidado si está en un directorio enlazado y quiere el nombre del directorio de destino. Lamentablemente, no creo que se pueda hacer en una sola expresión de expansión de parámetros, quizás estoy equivocado. Esto debería funcionar:

target_PWD=$(readlink -f .)
echo ${target_PWD##*/}

Para ver esto, un experimento:

cd foo
ln -s . bar
echo ${PWD##*/}

informa "bar"

DIRNAME

Para mostrar los directorios principales de una ruta (sin incurrir en un fork-exec de / usr / bin / dirname):

echo ${target_PWD%/*}

Esto, por ejemplo, transformar foo / bar / baz -> foo / bar


6
2018-04-04 04:16