Como obter o caminho atual sem a última pasta em um script?

0

Eu quero executar um script que salve o caminho atual em uma variável, excluindo a pasta em que o script é executado. Exemplo:

/tmp/test/test2/test3/test.sh

path=$PWD
echo $path

/tmp/test/test2/test3 . Mas eu quero excluir a pasta na qual o script sh está.

Então, minha saída desejada seria: /tmp/test/test2

    
por membersound 15.08.2018 / 10:50

5 respostas

2

experimente o seguinte código,

dirname "$(pwd)"
  • dirname - sufixo de faixa do caminho do arquivo / dir
por 15.08.2018 / 10:56
1

Você pode usar

dir=${PWD%/*}    # or:  dir=$( dirname "$PWD" )

ou

dir="$PWD/.."

ou

dir=".."

No primeiro caso, a variável PWD , que contém o diretório de trabalho atual, é usada para obter o caminho do diretório um nível acima removendo o último / e tudo depois dele.

No segundo caso, a variável PWD é usada para simplesmente criar um caminho para o diretório acima usando .. .

No terceiro caso, simplesmente nos referimos ao diretório acima usando um caminho relativo do diretório atual.

Qual alternativa você usa depende do que você vai usar o caminho.

Exemplos:

$ echo $PWD
/tmp/shell-sh.jAtMYgn0
$ dir=${PWD%/*}
$ echo "$dir"
/tmp
$ dir="$PWD/.."
$ echo "$dir"
/tmp/shell-sh.jAtMYgn0/..
$ dir=".."
$ echo "$dir"
..
    
por 15.08.2018 / 11:04
0

Em zsh :

dir=$PWD:h

Como dirname , que remove um componente de diretório do final de $PWD . Quando $PWD for / , $dir se tornará / como com dirname .

Uma vantagem sobre

dir=$(dirname -- "$PWD")

é que ainda funciona se o nome da pasta $PWD terminar em caracteres de nova linha.

Note que não é necessariamente o pai do diretório atual. Por exemplo, quando $PWD é /tmp e /tmp é um link simbólico para /var/tmp , o diretório pai do diretório atual seria /var , não / . Para obter o diretório pai, você poderia fazer:

dir=$PWD/..
dir=$dir:P

ou:

dir=$PWD:P:h

(o modificador :P torna $dir um caminho canônico (resolve todos os componentes do symlink, . e .. como o GNU readlink -f )).

Ou POSIXly:

dir=$(cd -P .. && pwd -P)

Em qualquer caso, observe que $PWD em um script não tem nada a ver com o caminho do script. Se você quiser o diretório pai do diretório que contém o script, isso seria $0:P:h:h in zsh .

    
por 29.10.2018 / 16:36
-1

Por fim, foi tão simples quanto: current=$(dirname "$(pwd)")

    
por 15.08.2018 / 11:11
-1

Diretório de trabalho atual, por exemplo: / home / dev / other

dir=$PWD

Diretório pai

parentdir="$(dirname "$dir")"'
    
por 29.10.2018 / 15:37

Tags