还有,我该如何编写代码使起始目录始终位于.bat文件所在的位置?
在cmd中,我使用了以下代码:
%~d1 cd "%~p1" call cmd
因此,当我在桌面上打开cmd时,它从桌面上的目录开始。
我怎么能在MSYS2中做类似的事情?
db_home: windows
/etc/nsswitch.conf
not /etc/nssswitch.conf
- Jay Killeendb_home: env windows /C/your-dot-files
,就像这里建议的一样[https://conemu.github.io/en/CygwinHome.html]。 - Joel Santos RicoMsys2将使用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
C:/Users /home ntfs binary,posix=0,noacl,user 0 0
。顺便说一句,我更喜欢将整个 C:\Users
挂载到 /home
,因为这样更容易遵守。 - Johann Changmklink
来创建目录符号链接的方法,类似于Linux中的ln
。e:\msys\home
目录,然后以管理员身份运行cmd
,运行以下命令:cd c:\msys64
mklink /j home e:\msys\home
无需进行其他更改。
在特定的基础更新之后,链接有时会失效,需要再次进行创建,此时需要清空或重命名新生成的“home”目录。
~/.bash_profile
,其中~
是默认/原始的主目录),您可以更改$HOME环境变量。export HOME=/something/else
$HOME
之后运行cd
(不带参数);我没有测试过。/etc/passwd
文件。下面展示了两种方法。$ 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
# Change your home (`~`) dir to `C:\Users\my_username`
HOME="/c/Users/$(whoami)"
我真的很喜欢在Windows Terminal中使用七个MSYS2终端,因为它是一个很棒的终端壳,可以使用多个选项卡等现代功能。
从我在这里的MSYS2设置答案中:从头开始安装和设置MSYS2,包括将所有7个配置文件添加到Windows Terminal:
HOME
目录首先,这是如何将起始目录设置为您的HOME目录,以便在打开终端时终端会在那里启动:
然后,像这样添加一个MSYS2配置文件,设置打开Windows Terminal。
然后,点击打开选项卡右上角的小下拉箭头,选择“设置”-->在打开的设置选项卡中,点击左下角的“打开JSON文件”,如下所示:
在打开的JSON设置文件中,找到JSON文件中的“profiles”部分
"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
}
},
HOME
目录设置为您想要的任何位置。HOME
(~
)目录为任何位置:HOME
(~
)目录从MSYS2的默认目录C:\msys64\home\my_username
更改为您的常规Windows主目录C:\Users\my_username
:C:\msys64\home\my_username\.bash_profile
文件。修改它使其如下所示。注意:您可以用#
将所有内容注释掉,并将以下内容添加到顶部:echo ~
和echo "$HOME"
,确保它们现在都显示为/c/Users/my_username
。运行ls -a
,确保您可以看到您的用户的正常Windows主目录的内容。pwd
应该显示您当前所在的目录是该目录...我在 /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会完整显示路径而不只是~
。
set HOME=C:\Users\%USERNAME%
C:\LocalApp\PortableGit\git-bash.exe
这使我可以将我的 .bash_profile 放在这个 HOME 目录下(而不是默认的网络位置,这样会非常慢)。