bash - mostrar - ver o diretorio atual linux




Obter o nome do diretório atual(sem caminho completo) em um script Bash (13)

Como eu poderia obter apenas o nome do diretório de trabalho atual em um script bash, ou melhor ainda, apenas um comando de terminal.

pwd dá o caminho completo do diretório de trabalho atual, por exemplo, /opt/local/bin mas eu só quero bin


Abaixo grep com regex também está funcionando,

>pwd | grep -o "\w*-*$"

Apenas use:

pwd | xargs basename

ou

basename "`pwd`"

Eu costumo usar isso em scripts sh

SCRIPTSRC=`readlink -f "$0" || echo "$0"`
RUN_PATH=`dirname "${SCRIPTSRC}" || echo .`
echo "Running from ${RUN_PATH}"
...
cd ${RUN_PATH}/subfolder

você pode usar isso para automatizar as coisas ...


Eu gosto da resposta selecionada (Charles Duffy), mas tenha cuidado se você estiver em um diretório com links simbólicos e quiser o nome do diretório de destino. Infelizmente eu não acho que isso pode ser feito em uma expressão de expansão de parâmetro único, talvez eu esteja enganado. Isso deve funcionar:

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

Para ver isso, uma experiência:

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

relata "barra"

DIRNAME

Para mostrar os diretórios principais de um caminho (sem incorrer em um fork-exec de / usr / bin / dirname):

echo ${target_PWD%/*}

Isto irá, por exemplo, transformar foo / bar / baz -> foo / bar


Eu uso este comando:

dirname "$0"


Não há necessidade de basename, e especialmente não há necessidade de um subshell executando pwd (o que adiciona uma extra e cara, fork ); o shell pode fazer isso internamente usando a expansão de parâmetro :

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.

Observe que, se você aplicar essa técnica em outras circunstâncias (não em PWD , mas em alguma outra variável que contenha um nome de diretório), talvez seja necessário aparar as barras à direita. O abaixo usa o suporte a extglob do bash para funcionar mesmo com várias barras finais:

dirname=/path/to/somewhere//
shopt -s extglob           # enable +(...) glob syntax
result=${dirname%%+(/)}    # trim however many trailing slashes exist
result=${result##*/}       # remove everything before the last / that still remains
printf '%s\n' "$result"

Alternativamente, sem extglob :

dirname="/path/to/somewhere//"
result="${dirname%"${dirname##*[!/]}"}" # extglob-free multi-trailing-/ trim
result=${result##*/}                    # remove everything before the last /

Para encontrar jóqueis como eu:

find $PWD -maxdepth 0 -printf "%f\n"

Que tal grep:

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

Use o programa de basename . Para o seu caso:

% basename "$PWD"
bin

Você pode usar o utilitário de nome da base, que exclui qualquer prefixo que termine em / e o sufixo (se presente na sequência) da sequência e imprime o resultado na saída padrão.

$basename <path-of-directory>

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

Detalhes


basename $(pwd)

ou

echo "$(basename $(pwd))"

echo "$PWD" | sed 's!.*/!!'

Se você estiver usando o shell Bourne ou ${PWD##*/} não estará disponível.





shell