Como posso obter o diretório de trabalho atual? [duplicar] (Português)

Esta pergunta já tem respostas aqui :

Comentários

  • Relacionados: Obtendo o diretório de origem de um script Bash de dentro de
  • Esta não é uma duplicata da pergunta para a qual está atualmente marcada como uma. As duas questões devem ser comparadas, pelo menos, com base em seus títulos (bem como em suas respostas). Que a resposta a esta questão já foi abordada por outra é, ou deveria ser, irrelevante.
  • @KennyEvitt na verdade, um dos principais motivos pelos quais fechamos é precisamente porque uma resposta tem foi dado em outro lugar. E, de fato, a questão principal aqui é realmente como atribuir a saída de um comando a uma variável, que é coberta pelo dupe. Também respondi a este caso específico, portanto, todas as bases estão cobertas. Não haveria nenhum benefício em abri-lo novamente.
  • @terdon Como um recurso disponível, e destinado, para toda a população de usuários Unix & Linux, este é uma pergunta valiosa, mesmo se o autor da pergunta original realmente só precisasse de uma resposta já abordada em outro lugar. Se houver alguma coisa, acho que esta questão deve ser editada para corresponder mais ao seu título e deve ser reaberta, para não permitir mais atividades, mas para não sugerir que esta questão é ' ruim '.
  • @KennyEvitt fechando como uma duplicata de forma alguma implica que a pergunta seja ruim! Esta pergunta ficará aqui, respondida, para sempre. Se você realmente deseja saber como obter o diretório de trabalho atual, encontrará sua resposta aqui. Se você apenas deseja saber como salvar a saída de um comando em uma variável, também encontrará a resposta aqui, seguindo o link para o dupe. Em qualquer caso, isso não é ' realmente algo que eu deveria fazer sozinho, se você acha que deveria ser reaberto, abra uma discussão em Unix e Linux Meta onde essas coisas devem ser resolvidas.

Resposta

Lá “não é necessário fazer isso,” já está em uma variável:

$ echo $PWD /home/terdon 

O PWD a variável é definida por 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 a partir do ambiente como segue. Se um valor para PWD é passado para o shell no ambiente quando é executado, o valor é um caminho absoluto do diretório de trabalho atual que não é maior que {PATH_MAX} bytes, incluindo o byte nulo final, e o valor não contém quaisquer componentes que são ponto ou ponto-ponto, então o shell deve definir PWD para o valor do ambiente. Caso contrário, se um valor para PWD é passado para o shell no ambiente quando ele é executado, o valor é um caminho absoluto do diretório de trabalho atual e o valor não contém nenhum componente que seja ponto ou ponto-ponto, então ele não é 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 para o nome do caminho que seria gerado por pwd -P. Nos casos em que PWD é definido com 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 com o nome do caminho que seria gerado por pwd -P, se não houver permissão suficiente no diretório de trabalho atual, ou em qualquer pai desse diretório, para determinar qual seria o nome do caminho, o valor de PWD é não especificado. As atribuições a esta variável podem ser ignoradas. Se um aplicativo definir ou cancelar a definição do 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 ` ` (crases):

var=$(command) 

ou

var=`command` 

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

Resposta

dir=$(pwd)

Este é mais portátil e preferível ao método de crase.

Usar $() permite que você aninhe os comandos

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

Comentários

  • Na verdade, se alguma coisa, os backtics são mais portáteis, pois são anteriores ao formato $().Pode ser que ainda haja algumas máquinas executando shells que não ' suportam a nova notação $(). Embora ambos sejam definidos por POSIX, o $() é preferido hoje porque é uma sintaxe mais limpa e pode ser aninhado ($(command1 $(command2))) em um ponto maneira mais simples do que os crases.

Resposta

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

dir=`pwd` 

Resposta

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

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

Resposta

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

dir=$(/usr/bin/pwd) 

ou conforme o comentário:

dir=$(pwd -P) 

já que eu não gosto de aspas porque elas não podem aninhar.

Comentários

  • dir = $ (pwd -P) também funciona.

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *