experimente o seguinte código,
dirname "$(pwd)"
- dirname - sufixo de faixa do caminho do arquivo / dir
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
Dá /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
experimente o seguinte código,
dirname "$(pwd)"
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"
..
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 fim, foi tão simples quanto: current=$(dirname "$(pwd)")
Diretório de trabalho atual, por exemplo: / home / dev / other
dir=$PWD
Diretório pai
parentdir="$(dirname "$dir")"'