Je veux obtenir le répertoire personnel de l'utilisateur "hôte" Windows à partir de bash, donc ma variable d'environnement théorique (ou programme)
echo $WINHOME
produirait quelque chose comme
/mnt/c/Users/dualed
Cela serait-il possible?
Lorsque je le recherche, je ne trouve que les résultats pour le contraire (recherche du chemin d’utilisateur de LXSS auprès de l’hôte)
J'ai une idée de repli de l'extraction $PATH
, car il existe des chemins prévisibles comme ceux qui contiennent AppData
, mais je préférerais garder les choses simples, si possible.
windows-subsystem-for-linux
à double
la source
la source
HOME
,PWD
,USER
, mais ils se réfèrent tous à l'utilisateur de Linux, pas à l'utilisateur Windows « hôte ».Réponses:
Vous pouvez lancer
cmd.exe
depuis bash pour obtenir les variables d'environnement de l'hôte. Dans ce qui suit,win_userprofile
a votre réponse, et les autres variables sont pour la complétude.Sources: Craig Loewen chez Microsoft et Michael Hoffman .
la source
$win_userprofile
contient le chemin des fenêtres,$userprofile
détient la réponse à ma question, mais oui, c'est à peu près ce que je cherchais. Cependant, je préférerais que la traduction du chemin Windows vers le chemin Unix soit moinssudo -s
shell root ( ) etcmd.exe
je n'étais pas sur mon chemin. Je cherchais donc un moyen de le trouver. dans le shell de connexion, cela n'est pas nécessaire. (2) Bien quecmd.exe /c echo %userprofile%
donne le chemin dans Windows, je luttais avec dessed
filtres complexes surmount
oudf
pour mapper le(DriveLetter):
chemin vers le chemin Linux;findmnt
est une solution très soignée. Merci beaucoup: j'ai beaucoup appris.Depuis que j'ai écrit cette question, l'outil
wslpath
a été ajouté à WSL / LXSS. Cet outil peut convertir les chemins de fenêtres en point de montage correct (?) Sur le sous-système Linux. La solution la plus simple serait donc la suivante:De plus, il semble maintenant possible de mettre en cascade des environnements. C’est donc aussi une option:
PS: L'
wslpath
outil semble extrêmement alpha:juste un petit avertissement.
Mise à jour, espérons-le, utile: J'utilise actuellement un petit assistant pour récupérer les variables d'environnement Windows
Et en l'utilisant comme:
la source
wslpath
n'est pas un outil. C'est juste un lien symbolique (c'est-à-dire un lien symboliqueln -s
) d'un/init
fichier dans unrootfs
dossier./init
l'exécutable se trouve derrièrewslpath
, mais il agit différemment lorsquewslpath
vous l'appelez, alors j'appellerai toujours l'outilwslpath
et non/init
. Il a également été annoncéwslpath
par les développeurs: github.com/Microsoft/WSL/issues/1834#issuecomment- 346443730C’est ma réponse de référence , si la question ne devait pas donner lieu à une réponse pour le moment, ou ne serait pas claire. Il fait ce que j'ai écrit dans la question que je voulais éviter - deviner le répertoire de base de l'utilisateur en cherchant des champs contenant
AppData
(et un peu plus) dans$PATH
Bien sûr, il faut qu’il y ait au moins un chemin dans
%APPDATA%
Windows et (ce qui est plus problématique à mon avis) qu’il n’y ait pas de chemin AppData défini avec d’autres noms d’utilisateur, par exemple dans une portée globale et enfin que le répertoire de base soit réellement monté dans./mnt
.Exemple de sortie:
la source
beaucoup de bonnes infos ici! Merci. j'avais besoin d'un tweak supplémentaire ..
quand j'utilise l'
cmd.exe
astuce dans mon.bash_aliases
fichier, j'obtiens des erreurs dues aux caractères de nouvelle ligne indésirables de CMD echo, quiwslpath
passent à travers:CMD echo ne semble pas avoir l'
-n
option de bash echo , donc empruntant à un article de StackOverflow ( batch Windows: echo sans nouvelle ligne ), j'ai ajouté un pseudo-chomp pour les supprimer:et maintenant mon alias est heureux:
la source
\r
WSL, je pense avoir utilisé quelque chose comme| tr -d '\r'
(voir comme\r
n'est pas valide dans les chemins de Windows de toute façon), mais c'est juste moi d'être plus à l'aise dans LinuxEn supposant que vous connaissiez votre identifiant Windows, vous pouvez le mettre dans votre fichier .profile: export WINHOME = $ (wslpath C: / Users / dualed)
la source
wslpath
ne fonctionne que dans les constructions d'initiés pour l'instantAs-tu essayé
?En Cygwin, je reçois
Bien sûr, Cygwin n’est pas le même que WSL, mais il se peut qu’une réponse simple vous attende depuis le début.la source