如何更改 MSYS2 上的 HOME 目录和启动目录?
How to change HOME directory and start directory on MSYS2?
我已经安装了 MinGW-w64 和 MSYS2。但是如何更改 MSYS2 中的 HOME 目录?因此,当我键入 cd $home 或 cd ~ 时,它会转到我定义的另一个目录。
以及如何编写代码,使起始目录始终是放置 .bat 文件的位置?
在 cmd 中我使用了这段代码:
%~d1
cd "%~p1"
调用命令
所以当我在桌面上打开 cmd 时,它从桌面上的目录开始。
我怎样才能用 msys2 做类似的事情?
在您的一个 shell 启动脚本中(例如 ~/.bash_profile
,其中 ~
是 default/original 主目录)您可以更改 $HOME 环境变量:
export HOME=/something/else
如果您希望 shell 在该目录中打开,您可能需要在设置 $HOME
后 运行 cd
(不带参数);我没有测试过。
我创建了一个设置 HOME 变量的批处理文件:
set HOME=C:\Users\%USERNAME%
C:\LocalApp\PortableGit\git-bash.exe
这允许我将我的 .bash_profile 放在这个主目录中(而不是在执行速度非常慢的默认网络位置)。
如果您想使用您的 windows 主文件夹作为 MSYS2 的主文件夹,您可以编辑 /etc/nsswitch.conf 并写入:
db_home: windows
创建或修改 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", [=12=]) } NR < 7 { printf(":") }' - >>/etc/passwd
Msys2 将使用 windows%HOME% 作为 $HOME 目录。如果您在环境变量中设置 %HOME%(到您需要 Msys2 才能使用的 windows 目录),它将起作用。
我更喜欢只更新 /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
除了上面的答案,还有一种方法是用Windows命令mklink
做一个目录符号link,类似于[=25=的ln
]:
首先创建e:\msys\home
的目录,然后运行cmd
作为管理员,然后
cd c:\msys64
mklink /j home e:\msys\home
无需其他更改。
我已经安装了 MinGW-w64 和 MSYS2。但是如何更改 MSYS2 中的 HOME 目录?因此,当我键入 cd $home 或 cd ~ 时,它会转到我定义的另一个目录。
以及如何编写代码,使起始目录始终是放置 .bat 文件的位置?
在 cmd 中我使用了这段代码:
%~d1 cd "%~p1" 调用命令
所以当我在桌面上打开 cmd 时,它从桌面上的目录开始。
我怎样才能用 msys2 做类似的事情?
在您的一个 shell 启动脚本中(例如 ~/.bash_profile
,其中 ~
是 default/original 主目录)您可以更改 $HOME 环境变量:
export HOME=/something/else
如果您希望 shell 在该目录中打开,您可能需要在设置 $HOME
后 运行 cd
(不带参数);我没有测试过。
我创建了一个设置 HOME 变量的批处理文件:
set HOME=C:\Users\%USERNAME%
C:\LocalApp\PortableGit\git-bash.exe
这允许我将我的 .bash_profile 放在这个主目录中(而不是在执行速度非常慢的默认网络位置)。
如果您想使用您的 windows 主文件夹作为 MSYS2 的主文件夹,您可以编辑 /etc/nsswitch.conf 并写入:
db_home: windows
创建或修改 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", [=12=]) } NR < 7 { printf(":") }' - >>/etc/passwd
Msys2 将使用 windows%HOME% 作为 $HOME 目录。如果您在环境变量中设置 %HOME%(到您需要 Msys2 才能使用的 windows 目录),它将起作用。
我更喜欢只更新 /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
除了上面的答案,还有一种方法是用Windows命令mklink
做一个目录符号link,类似于[=25=的ln
]:
首先创建e:\msys\home
的目录,然后运行cmd
作为管理员,然后
cd c:\msys64
mklink /j home e:\msys\home
无需其他更改。