【问题标题】:How to change HOME directory and start directory on MSYS2?如何更改 MSYS2 上的 HOME 目录和启动目录?
【发布时间】:2016-02-29 19:15:20
【问题描述】:

我已经安装了 MinGW-w64 和 MSYS2。但是如何更改 MSYS2 中的 HOME 目录?这样当我输入 cd $home 或 cd ~ 时,它会转到我定义的另一个目录。

以及如何编写代码以使起始目录始终是 .bat 文件所在的位置?

在 cmd 中我使用了以下代码:

%~d1 cd "%~p1" 调用cmd

所以当我在桌面上打开 cmd 时,它会从桌面上的目录开始。

如何使用 msys2 做类似的事情?

【问题讨论】:

  • 如果这些答案之一解决了您的问题,请将其标记为已接受。 :)

标签: windows gcc mingw-w64 msys2


【解决方案1】:

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

export HOME=/something/else

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

【讨论】:

    【解决方案2】:

    我创建了一个设置 HOME 变量的批处理文件:

    set HOME=C:\Users\%USERNAME%
    C:\LocalApp\PortableGit\git-bash.exe
    

    这允许我将我的 .bash_profile 放在这个 HOME 中(而不是放在执行非常缓慢的默认网络位置)。

    【讨论】:

    • git-bash 和 MSYS2 是不同的工具
    【解决方案3】:

    如果你想使用你的 windows 主文件夹作为 MSYS2 的主文件夹,你可以编辑 /etc/nsswitch.conf 并编写:

    db_home: windows
    

    【讨论】:

    • 由于某种原因,我无法让它为我工作。我还有什么需要做的吗?
    • /etc/nsswitch.conf 不是/etc/nssswitch.conf
    • 这对我有用。我只需要修复答案中的拼写错误。我将进行编辑,但至少需要更改 6 个字符。因此,我可能还有 5 个其他不相关的字符更改来修复此答案。
    • 对我没用,但是 db_home: env windows /C/your-dot-files 按照这里的建议 [conemu.github.io/en/CygwinHome.html]
    • @JoelSantosRico 您的链接在链接中包含结束“]”。这是工作链接:conemu.github.io/en/CygwinHome.html
    【解决方案4】:

    创建或修改 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 时这不起作用
    【解决方案5】:

    Msys2 将使用 Windows %HOME% 作为 $HOME 目录。如果您在环境变量中设置 %HOME%(设置为您需要 Msys2 使用的 windows 目录),它将起作用。

    【讨论】:

    • 问题是 git 使用与 msys2 相同的环境变量来存储 ssh 密钥。如何将 %HOME% 环境变量更改为其他内容?我已经在here上开了一个新帖子
    【解决方案6】:

    我更喜欢只更新/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
    

    【讨论】:

    • 我喜欢这个想法,因为它是一种更纯粹的 Unix 方式。但最后一行的语法实际上应该是C:/Users /home ntfs binary,posix=0,noacl,user 0 0。顺便说一句,我更喜欢将整个 C:\Users 安装到 /home,因为它更容易遵守。
    【解决方案7】:

    除了上面的anwsers,还有另一种方法是使用Windows命令mklink进行目录符号链接,类似于Linux上的ln

    先创建一个e:\msys\home的目录,然后以Administrator身份运行cmd,然后

    cd c:\msys64
    mklink /d home e:\msys\home
    

    无需其他更改。

    【讨论】:

      猜你喜欢
      • 2020-06-26
      • 1970-01-01
      • 1970-01-01
      • 2018-04-06
      • 1970-01-01
      • 2012-06-09
      • 1970-01-01
      • 1970-01-01
      • 2021-05-14
      相关资源
      最近更新 更多