web-dev-qa-db-fra.com

Comment obtenir le répertoire de travail actuel?

Je veux avoir un script qui prend le répertoire de travail actuel dans une variable. La section qui a besoin du répertoire est comme ceci dir = pwd. Il affiche simplement pwd comment puis-je obtenir le répertoire de travail actuel dans une variable?

205
Interesting...

Ce n'est pas nécessaire, c'est déjà dans une variable:

$ echo $PWD
/home/terdon

La variable PWD est définie par POSIX et fonctionnera sur tous les shells compatibles POSIX:

PWD

Défini par le shell et par l'utilitaire cd. Dans le Shell, la valeur doit être initialisée à partir de l'environnement comme suit. Si une valeur pour PWD est transmise au shell dans l'environnement lors de son exécution, la valeur est un chemin d'accès absolu du répertoire de travail actuel qui ne dépasse pas {PATH_MAX} octets, y compris l'octet nul final, et la valeur ne contient pas tous les composants qui sont point ou point-point, alors le Shell doit définir PWD à la valeur de l'environnement. Sinon, si une valeur pour PWD est transmise au shell dans l'environnement lors de son exécution, la valeur est un chemin d'accès absolu du répertoire de travail actuel et la valeur ne contient aucun composant point ou point-point, alors il n'est pas spécifié si le shell définit PWD à la valeur de l'environnement ou définit PWD au nom de chemin qui serait sorti par pwd -P. Sinon, l'utilitaire sh définit PWD sur le chemin qui serait généré par pwd -P. Dans les cas où PWD est défini sur la valeur de l'environnement, la valeur peut contenir des composants qui font référence à des fichiers de type lien symbolique. Dans les cas où PWD est défini sur le chemin d'accès qui serait généré par pwd -P, s'il n'y a pas d'autorisation suffisante sur le répertoire de travail en cours ou sur l'un des parents de ce répertoire, pour déterminer ce que serait ce chemin d'accès, la valeur de PWD est non spécifié. Les affectations à cette variable peuvent être ignorées. Si une application définit ou annule la valeur de PWD, les comportements des utilitaires cd et pwd ne sont pas spécifiés.


Pour la réponse plus générale, la façon de sauvegarder la sortie d'une commande dans une variable est de placer la commande dans $() ou ` ` (Backticks):

var=$(command)

ou

var=`command`

Des deux, la $() est préférée car il est plus facile de construire des commandes complexes comme command0 $(command1 $(command2 $(command3))).

305
terdon

dir=$(pwd)

C'est plus portable et préféré à la méthode des backticks.

L'utilisation de $() vous permet d'imbriquer les commandes

par exemple: mech_pwd=$(pwd; echo in $(hostname))

30
Govind Kailas

Vous pouvez soit utiliser la variable d'environnement $PWD, ou écrivez quelque chose comme:

dir=`pwd`
11
chrk

Vous devez utiliser la substitution de commandes pour enregistrer la sortie de la commande pwd dans une variable. La substitution de commande peut utiliser des backticks ou des caractères dollar. Comme ça:

$ 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

La valeur du répertoire de travail actuel peut être différente. Si vous avez utilisé des liens symboliques pour obtenir le répertoire courant, pwd donnera des résultats différents de/usr/bin/pwd. Puisque vous utilisez bash, j'utiliserais:

dir=$(/usr/bin/pwd)

ou selon commentaire:

dir=$(pwd -P)

car je n'aime pas les guillemets car ils ne peuvent pas s'emboîter.

1
Robert Jacobs