如何在MSYS2上更改HOME目录和起始目录?

36
我已安装MinGW-w64和MSYS2。但是我该如何更改MSYS2中的HOME目录?这样当我键入cd $home或cd ~时它会进入我定义的另一个目录。
还有,我该如何编写代码使起始目录始终位于.bat文件所在的位置?
在cmd中,我使用了以下代码:
%~d1 cd "%~p1" call cmd
因此,当我在桌面上打开cmd时,它从桌面上的目录开始。
我怎么能在MSYS2中做类似的事情?

如果这些答案中的一个解决了您的问题,您可以将其标记为已接受。 :) - Dane Brouwer
9个回答

58
如果您想将Windows的主目录用作MSYS2的主目录,您可以编辑 /etc/nsswitch.conf 并编写以下内容:
db_home: windows

2
我无法让它为我工作,原因不明。我需要做些其他的事情吗? - wheeler
2
/etc/nsswitch.conf not /etc/nssswitch.conf - Jay Killeen
2
这对我有用。我只需要修复答案中的拼写错误。我会进行编辑,但需要更改至少6个字符。因此,可能还有其他5个不相关的字符更改需要我来修复这个答案。 - Jay Killeen
2
对我来说没有用,但是这个可以:db_home: env windows /C/your-dot-files,就像这里建议的一样[https://conemu.github.io/en/CygwinHome.html]。 - Joel Santos Rico
1
@JoelSantosRico,你的链接包含了"]"符号。这是可用的链接:https://conemu.github.io/en/CygwinHome.html - go2null
显示剩余2条评论

6

Msys2将使用Windows的%HOME%作为它的$HOME目录。如果您在环境变量中设置了%HOME%(指向您需要Msys2使用的Windows目录),它将正常工作。


1
问题在于Git使用与MSYS2相同的环境变量来存储SSH密钥。如何将%HOME%环境变量更改为其他内容? 我已经在此处开始了一个新线程:https://stackoverflow.com/questions/65788934/how-to-run-msys2-separately-from-git - Cristian F.

5
我更喜欢在 /etc/fstab 中进行更新,而不是使用 fstab 命令。
# cat /etc/fstab
# For a description of the file format, see the Users Guide
# https://cygwin.com/cygwin-ug-net/using.html#mount-table

# DO NOT REMOVE NEXT LINE. It remove cygdrive prefix from path
none / cygdrive binary,posix=0,noacl,user 0 0
##################################################################
# Canonicalize the two home directories by mounting the windows  #
# user home with the same path mapping as unix.                  #
##################################################################
none /c/Users/Edward /home/Edward binary,posix=0,noacl,user 0 0

1
我喜欢这个想法,因为它更符合Unix的纯粹方式。但是最后一行的语法实际上应该是 C:/Users /home ntfs binary,posix=0,noacl,user 0 0。顺便说一句,我更喜欢将整个 C:\Users 挂载到 /home,因为这样更容易遵守。 - Johann Chang

4
除了以上的答案,还有一种使用Windows命令mklink来创建目录符号链接的方法,类似于Linux中的ln
首先创建一个e:\msys\home目录,然后以管理员身份运行cmd,运行以下命令:
cd c:\msys64
mklink /j home e:\msys\home

无需进行其他更改。

在特定的基础更新之后,链接有时会失效,需要再次进行创建,此时需要清空或重命名新生成的“home”目录。


2
在您的shell启动脚本中(例如~/.bash_profile,其中~是默认/原始的主目录),您可以更改$HOME环境变量。
export HOME=/something/else

如果希望你的shell在该目录中打开,可能需要在设置$HOME之后运行cd(不带参数);我没有测试过。

2
创建或修改MSYS2的/etc/passwd文件。下面展示了两种方法。
可以从MSYS2 shell中运行以下命令,无论文件是否存在以及它是否已经包含当前用户,都可以安全地运行:
$ grep "^${USERNAME}:" /etc/passwd >/dev/null 2>&1 || mkpasswd | grep "^${USERNAME}:" >>/etc/passwd

接下来,编辑/etc/passwd文件,并更改相关用户的主目录字段(第6个以冒号分隔的字段)。

$ vim /etc/passwd

奖励:通过编辑第一个字段也可以更改MSYS2用户名。

按需将当前主目录内容移动到新主目录。

注销,然后重新登录。

/etc/passwd的编辑可以在不进行手动编辑的情况下完成,但这会使得要粘贴到MSYS2 shell中的命令行更加复杂,并且如果/etc/passwd文件已经存在并且其中已经有了用户名,则可能无法正常工作:

__DIR="/path/to/home"
mkpasswd | grep "^${USERNAME}:" | \
awk -v DIR="${__DIR}" -v RS=":" -v ORS="/n" \
'NR == 6 { printf(DIR ":"); next } { printf("%s", $0) } NR < 7 { printf(":") }' - >>/etc/passwd

当您使用LDAP登录Windows时,此功能无法正常工作。 - niid

0
如何在MSYS2中更改“HOME”目录?
快速总结:
打开“C:\msys64\home\my_username\.bash_profile”文件,并在顶部添加以下内容:
# Change your home (`~`) dir to `C:\Users\my_username`
HOME="/c/Users/$(whoami)"

细节

我真的很喜欢在Windows Terminal中使用七个MSYS2终端,因为它是一个很棒的终端壳,可以使用多个选项卡等现代功能。

从我在这里的MSYS2设置答案中:从头开始安装和设置MSYS2,包括将所有7个配置文件添加到Windows Terminal

1. 将起始目录设置为您的HOME目录

首先,这是如何将起始目录设置为您的HOME目录,以便在打开终端时终端会在那里启动:

打开Windows Terminal。

然后,点击打开选项卡右上角的小下拉箭头,选择“设置”-->在打开的设置选项卡中,点击左下角的“打开JSON文件”,如下所示:

enter image description here

在打开的JSON设置文件中,找到JSON文件中的“profiles”部分

然后,像这样添加一个MSYS2配置文件,设置"startingDirectory"的值。请注意,这只是MSYS2配置文件中的七个之一。请参阅上面的完整答案以获取所有7个配置文件。
        // -ucrt64 (recommended default)
        {
            "commandline": "C:/msys64/msys2_shell.cmd -defterm -here -no-start -ucrt64 -shell bash",
            "guid": "{a718a3d5-9e77-4d0d-b7b6-69ec3d190206}",
            "hidden": false,
            "name": "MSYS2: ucrt64 (recommended default)",
            // "startingDirectory": "C:/msys64/home/%USERNAME%", // alternative
            "startingDirectory": "%USERPROFILE%", // ie: C:\Users\my_username
            "icon": "C:/msys64/ucrt64.ico",
            "font": 
            {
                "size": 10
            }
        },

2. 将您的HOME目录设置为您想要的任何位置。
接下来,我将告诉您如何在七个MSYS2终端中设置我的HOME~)目录为任何位置:
再次,参考我的MSYS2设置答案:从头开始安装和设置MSYS2,包括将所有7个配置文件添加到Windows终端
将您的HOME~)目录从MSYS2的默认目录C:\msys64\home\my_username更改为您的常规Windows主目录C:\Users\my_username
在文本编辑器(如VSCode)中打开C:\msys64\home\my_username\.bash_profile文件。修改它使其如下所示。注意:您可以用#将所有内容注释掉,并将以下内容添加到顶部
``` # 将您的主目录(`~`)更改为`C:\Users\my_username` HOME="/c/Users/$(whoami)"
# 如果存在,加载您的`C:\Users\my_username\.profile`文件 if [ -f "$HOME/.profile" ]; then . "$HOME/.profile" fi ```
关闭并重新打开Windows终端。运行echo ~echo "$HOME",确保它们现在都显示为/c/Users/my_username。运行ls -a,确保您可以看到您的用户的正常Windows主目录的内容。pwd应该显示您当前所在的目录是该目录...

0

我在 /etc/profile 中添加了 HOME='E:/Users/your_directory'。它看起来如下:

...
# Setup some default paths. Note that this order will allow user installed
# software to override 'system' software.
# Modifying these default path settings can be done in different ways.
# To learn more about startup files, refer to your shell's man page.

MSYS2_PATH="/usr/local/bin:/usr/bin:/bin"
MANPATH='/usr/local/man:/usr/share/man:/usr/man:/share/man'
INFOPATH='/usr/local/info:/usr/share/info:/usr/info:/share/info'
HOME='e:/Users/HP'

case "${MSYS2_PATH_TYPE:-minimal}" in
...

但是shell会完整显示路径而不只是~


这并没有真正回答问题。如果你有不同的问题,你可以点击提问来问。如果您想在此问题获得新的答案时收到通知,您可以关注此问题。一旦您拥有足够的声望,您也可以添加悬赏以引起更多人的关注。- 来自审查 - IGR94

-1
我创建了一个批处理文件,它设置了HOME变量:
set HOME=C:\Users\%USERNAME%
C:\LocalApp\PortableGit\git-bash.exe

这使我可以将我的 .bash_profile 放在这个 HOME 目录下(而不是默认的网络位置,这样会非常慢)。


2
git-bash和MSYS2是不同的工具。 - Arkanosis
@Arkanosis,有点像。实际上,Git Bash是基于MSYS2 MINGW64环境的。请参阅此处:https://www.msys2.org/docs/who-is-using-msys2/:“Git for Windows是基于MSYS2”。 - undefined
但是,事实是,Git Bash并不替代任何七个MSYS2环境,而且这些环境也不替代Git Bash。请参考这里:https://www.msys2.org/docs/git/ 和我的回答 - undefined
没错,但OP写道他们安装了“MinGW-w64和MSYS2”;对于git-bash来说,这个解决方案是无法帮助的,不幸的是。这并不意味着这个解决方案对于不知情地使用MSYS2的git-bash用户没有用处,显然是有用的。 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接