desenv-web-rp.com

Como posso obter o diretório de trabalho atual?

Eu quero ter um script que leva o diretório de trabalho atual para uma variável. A seção que precisa do diretório é assim dir = pwd. Apenas imprime pwd como faço para obter o diretório de trabalho atual em uma variável?

205
Interesting...

Não há necessidade de fazer isso, já existe em uma variável:

$ echo $PWD
/home/terdon

A variável PWD é definida pelo POSIX e funcionará em todos os shells compatíveis com POSIX:

PWD

Definido pelo Shell e pelo utilitário cd. No Shell, o valor deve ser inicializado do ambiente da seguinte maneira. Se um valor para PWD for passado para o Shell no ambiente quando ele for executado, o valor será um nome de caminho absoluto do diretório de trabalho atual que não terá mais que {PATH_MAX} bytes, incluindo o byte nulo final, e o valor não conterá qualquer componente que seja ponto ou ponto, o Shell deve definir PWD para o valor do ambiente. Caso contrário, se um valor para PWD for passado para o Shell no ambiente quando for executado, o valor será um nome de caminho absoluto do diretório de trabalho atual e o valor não conterá nenhum componente que seja ponto ou ponto. não está especificado se o Shell define PWD para o valor do ambiente ou define PWD para o nome do caminho que seria gerado por pwd -P. Caso contrário, o utilitário sh define PWD como o nome do caminho que seria gerado por pwd -P. Nos casos em que PWD é definido como o valor do ambiente, o valor pode conter componentes que se referem a arquivos do tipo link simbólico. Nos casos em que PWD é definido como o nome do caminho que seria gerado por pwd -P, se houver permissão insuficiente no diretório de trabalho atual ou em qualquer pai do diretório para determinar qual seria o nome do caminho, o valor de PWD será não especificado. As atribuições a essa variável podem ser ignoradas. Se um aplicativo definir ou desabilitar o valor de PWD, os comportamentos dos utilitários cd e pwd não serão especificados.


Para uma resposta mais geral, a maneira de salvar a saída de um comando em uma variável é colocar o comando em $() ou ` ` (Backticks):

var=$(command)

ou

var=`command`

Dos dois, o $() é preferido, pois é mais fácil criar comandos complexos como command0 $(command1 $(command2 $(command3))).

305
terdon

dir=$(pwd)

Isso é mais portátil e preferido do que o método backticks.

Usando $() permite aninhar os comandos

por exemplo: mech_pwd=$(pwd; echo in $(hostname))

30
Govind Kailas

Você pode usar a variável de ambiente $PWD, ou escreva algo como:

dir=`pwd`
11
chrk

Você precisa usar a substituição de comando para salvar a saída do comando pwd em uma variável. A substituição de comando pode usar reticulares ou caracteres em dólar. Como isso:

$ mkdir "/tmp/new dir"
$ cd "/tmp/new dir"
$ CWD="$(pwd)"
$ echo $CWD
/tmp/new dir
$ cd ~
$ echo $CWD
/tmp/new dir
$ pwd
/home/ja
5
Arkadiusz Drabczyk

O valor do diretório de trabalho atual pode ser diferente. Se você usou links simbólicos para obter o diretório atual, o pwd fornecerá resultados diferentes de/usr/bin/pwd. Desde que você está usando o bash, eu usaria:

dir=$(/usr/bin/pwd)

ou conforme comentário:

dir=$(pwd -P)

pois não gosto de aspas, pois elas não podem aninhar.

1
Robert Jacobs