【问题标题】:Which profile gets loaded when invoking WSL's 'bash -c' in Powershell?在 Powershell 中调用 WSL 的“bash -c”时会加载哪个配置文件?
【发布时间】:2020-04-20 05:07:54
【问题描述】:

在安装和设置 WSL (Debian) 的活动 Powershell 会话中,运行 bash -c 'whoami' 显示我已通过主机身份验证的 Active Directory 用户。但是,运行bash -c 'env' 不会显示我在/home/user/mnt/c/Users/user 配置文件中设置的环境变量。从 Powershell 中执行单个 Bash 命令时使用哪个配置文件(如果有)?


编辑:

我在/etc/bash.bashrc 找到了默认系统.bashrc,并在其中添加了所需的export 语句,但是在运行bash -c 'env' 时它们仍然没有显示。

编辑 2:

将导出添加到/etc/profile 也没有达到预期的效果。

【问题讨论】:

    标签: bash powershell windows-subsystem-for-linux windows-server


    【解决方案1】:
    $ echo $-
    

    将显示一个字符串,用于标识您正在运行“echo”命令的 bash 会话的属性。

    在登录 shell 或从登录 shell 启动的交互式子 shell 中,我可以在该字符串中看到字母“i”。在 bash 会话中开始只是为了运行一个命令,例如使用“bash -c”,此输出中缺少字母“i”,表明会话不是交互式的。您的 .bashrc 文件(或系统级等效文件)不会在非交互式的 bash 会话中运行。这是一个来自 RH7 linux 盒子的例子。我在运行 macos 的 mac 上看到了同样的差异。

    ~ $ ssh c7a
    Last login: Tue Dec 31 07:29:29 2019 from gateway
    [builder@c7a ~]$ echo $-
    himBH
    [builder@c7a ~]$ bash -c 'echo $-'
    hBc
    [builder@c7a ~]$
    

    因此,对于您使用 bash -c 为单个命令运行哪个配置文件的问题,我相信答案是“无”。

    【讨论】:

    • 啊,这是一个很好的命令! bash --help 表明在调用期间可以使用 Shell 选项,因此使用 bash -ic 证明使用 /etc/bash.bashrc。现在我很好奇为什么在非交互式会话中调用这些命令时不使用/etc/profile...
    • /etc/profile 是“profile”启动脚本的一部分,例如 ~/.bash_profile。配置文件脚本仅在您启动“登录 shell”时运行。这通常是您在本地或通过 ssh(登录时)打开的第一个 shell。从登录 shell 启动的 shell 可以是交互式的,但它们不被视为登录 shell。所以基本上你可以指望像 ~/.bashrc 这样的“rc”启动脚本在每次启动新的交互式 shell 时运行,但只能指望在登录时运行“配置文件”脚本。您始终可以将所需的任何脚本作为“bash -c”命令字符串的一部分获取。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多