Comment puis-je obtenir le répertoire de travail actuel? [dupliquer]

Cette question a déjà des réponses ici :

Commentaires

  • Connexes: Obtenir le répertoire source dun script Bash depuis
  • Il ne sagit pas dun doublon de la question pour laquelle il est actuellement marqué comme tel. Les deux questions doivent être comparées, au moins, en fonction de leurs titres (ainsi que de leurs réponses). Que la réponse à cette question soit déjà couverte par une autre est, ou devrait être, sans intérêt.
  • @KennyEvitt en fait, lune des principales raisons pour lesquelles nous fermons est précisément parce quune réponse a été donnée ailleurs. Et, en fait, la question principale ici est en fait de savoir comment affecter la sortie dune commande à une variable, qui est couverte par la dupe. Jai également donné la réponse à ce cas précis, donc toutes les bases sont couvertes. Il n’y aurait aucun avantage à ouvrir à nouveau.
  • @terdon En tant que ressource disponible et destinée à l’ensemble de la population des utilisateurs Linux Unix &, c’est une question précieuse, même si le demandeur original avait vraiment juste besoin dune réponse déjà traitée ailleurs. Si quoi que ce soit, je pense que cette question devrait être modifiée pour correspondre plus étroitement à son titre et elle devrait être rouverte, non pour permettre une activité supplémentaire, mais pour pas impliquer que cette question est ' mauvais '.
  • @KennyEvitt se fermant en double nimplique en aucun cas que la question est mauvaise! Cette question restera ici, répondue, pour toujours. Si vous voulez vraiment savoir comment obtenir le répertoire de travail actuel, vous trouverez votre réponse ici. Si vous voulez juste savoir comment enregistrer la sortie dune commande dans une variable, vous trouverez également la réponse ici en suivant le lien vers la dupe. Dans tous les cas, ce n’est pas ' quelque chose que je devrais faire seul, si vous pensez qu’il devrait être rouvert, veuillez ouvrir une discussion sur Unix & Linux Meta où de telles choses devraient être résolues.

Réponse

Là « Inutile de faire ça, cest » déjà dans une variable:

$ echo $PWD /home/terdon 

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

PWD

Défini par le shell et par lutilitaire cd. Dans le shell, la valeur doit être initialisée à partir de lenvironnement comme suit. Si une valeur pour PWD est transmise au shell dans lenvironnement lors de son exécution, la valeur est un chemin absolu du répertoire de travail actuel qui ne dépasse pas {PATH_MAX} octets, y compris loctet nul de fin, et la valeur ne contient pas tout composant qui est un point ou un point-point, alors le shell doit définir PWD à la valeur de lenvironnement. Sinon, si une valeur pour PWD est transmise au shell dans lenvironnement lors de son exécution, la valeur est un chemin absolu du répertoire de travail courant, et la valeur ne contient aucun composant qui soit point ou point-point, alors il nest pas spécifié si le shell définit PWD sur la valeur de lenvironnement ou définit PWD sur le chemin daccès qui serait généré par pwd -P. Sinon, lutilitaire sh définit PWD sur le chemin daccès qui serait généré par pwd -P. Dans les cas où PWD est défini sur la valeur de lenvironnement, 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 daccès qui serait généré par pwd -P, sil ny a pas dautorisation insuffisante sur le répertoire de travail actuel, ou sur tout parent de ce répertoire, pour déterminer ce que ce chemin serait, 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 une réponse plus générale, la façon de sauvegarder la sortie dune commande dans une variable est de placer la commande dans $() ou ` ` (backticks):

var=$(command) 

ou

var=`command` 

Des deux, le $() est préférable car il est plus facile de créer des commandes complexes comme command0 $(command1 $(command2 $(command3))).

Réponse

dir=$(pwd)

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

Lutilisation de $() vous permet dimbriquer les commandes

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

Commentaires

  • En fait, en fait, les backtics sont plus portables car ils sont antérieurs au format $().Il est possible quil y ait encore des machines exécutant des shells qui ne supportent ' t la nouvelle notation $(). Alors que les deux sont définis par POSIX, le $() est préféré aujourdhui car il sagit dune syntaxe plus propre et peut être imbriquée ($(command1 $(command2))) dans un lointain manière plus simple que les rétroprojecteurs.

Réponse

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

dir=`pwd` 

Answer

Vous devez utiliser la substitution de commande pour enregistrer la sortie de la commande pwd dans une variable. La substitution de commande peut utiliser des contre-indications ou des caractères dollar. Comme ceci:

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

Answer

La valeur du répertoire de travail actuel peut sois différent. 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, jutiliserais:

dir=$(/usr/bin/pwd) 

ou selon le commentaire:

dir=$(pwd -P) 

car je naime pas les guillemets car ils ne peuvent pas être imbriqués.

Commentaires

  • dir = $ (pwd -P) fonctionne également.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *