gpt4 book ai didi

powershell - 在调用 WSL 命令后保持 Windows 终端选项卡打开

转载 作者:行者123 更新时间:2023-12-02 01:34:11 27 4
gpt4 key购买 nike

我正在尝试在 Windows 终端 中打开一个 WSL (Ubuntu) 选项卡,然后使用 WSL 在该选项卡中运行一个命令。为此,我使用以下 PowerShell 命令:

wt new-tab -p "WSL (Ubuntu)" wsl echo "hallo"

问题是,在 echo 运行后,选项卡立即关闭。有没有办法让它保持打开状态?

最佳答案

  • 当您将命令行传递给 wt.exe 时,Windows 终端 CLI 将运行 而不是 shell,无论您是否还指定使用 -p 的特定 shell 配置文件。

  • 因此,实现你想要的:

    • 您的命令行必须显式调用感兴趣的 shell...
    • ...并且该 shell 必须支持启动交互式、保持打开的 session 与启动命令相结合

虽然 PowerShell 支持此功能,但与 POSIX 兼容的 shell,例如 bash - WSL 的默认 shell - 不支持。

A - 次优 - 解决方法如下:

wt -p 'WSL (Ubuntu)' wsl -e bash -c 'echo ''hello''\; exec $BASH'

注意:

  • 莫名其妙,从 Windows Terminal v1.13.11431.0 开始,; 字符。在引用的 -c 参数中需要转义为 \; - 否则它会被 wt.exe 解释为 its用于打开多个 标签页/窗口的分隔符。

  • 上面先执行了指定的echo命令,然后用exec把原来非交互的、自动关闭的shell换成交互的,停留- 通过 exec 打开 session 。这种方法的局限性在于,当替换原始 shell 时,除了启动命令所做的环境变量定义之外的任何状态更改都会丢失。

    • 更好但更精细的解决方案是可能的:创建 Bash 初始化文件 ~/.bashrc 的临时副本,附加启动命令,并将临时副本的文件路径传递给 bash--rcfile 选项;之后删除临时副本。

关于powershell - 在调用 WSL 命令后保持 Windows 终端选项卡打开,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72778785/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com