Windows 终端:启动 wsl 并保持 shell 打开时运行命令

Windows 终端:启动 wsl 并保持 shell 打开时运行命令

在 Windows 终端中,您可以创建一个配置文件并添加一些启动命令(通过文件commandline中的选项)settings.json。因此,当您启动配置文件时,WT 正在执行该命令,但随后它会退出(我们可以看到新选项卡)。

在 Windows 终端中启动wsl配置文件时,如何执行 Linux 命令并保持当前 shell 打开?(这样我就可以看到结果,并继续输入命令)。

注意:我想保留当前的 ​​shell。此解决方法启动另一个 shell,所以这里不起作用:

"commandline": "wsl -e bash -c \"foobar=`ls -a`; echo $foobar; exec bash\"",
. .. .bash_aliases .bash_history .bash_logout .bashrc .lesshsQ .lesshst .profile .ssh .viminfo .vimrc
test@xxx:~$ echo $foobar

test@xxx:~$

如果配置文件是 Powershell,我们有-NoExit

"commandline": "powershell.exe -NoExit \"<Your command goes here>\"",

如果配置文件是 CMD,我们有/k标志:

"commandline": "cmd /k \"<Your command goes here>\"",

我没有找到 wsl 等效项。


有关的:

Windows 终端版本:1.15.3465.0 - 运行 Debian bullseye 11.6 的 Wsl 2

答案1

正如@TomYan在评论中提到的,该--rcfile选项可能是实现此目的的唯一实际方法。不过,您提到您想避免使用文件,这也可以实现(感谢WSL/WT修改版这个答案和过程替换)为:

wsl -e bash -c "exec bash --rcfile <(echo 'source ~/.bashrc; foobar=$(ls -a)')"

请记住,Windows 终端配置文件似乎使用CMD引号和转义规则。因此,如果您的命令失败,请留意任何“陷阱”,并从命令提示符CMD)首先进行概要分析,查看报告的错误。

如果你从 PowerShell 执行此操作,引用/转义规则会有所不同。我建议使用此处字符串

wsl -e bash -c @'
exec bash --rcfile <(echo 'source ~/.bashrc; foobar=$(ls -a)')
'@

但是,对于大多数用户来说,请先尝试以下操作以查看它是否满足您的需求:

wsl -e bash -c \"export foobar=$(ls -a); echo $foobar; exec bash\""

如果需要将变量注入到新 shell 中,那么export在运行新 shell 之前对该变量进行 'ing 可能是最佳选择。但是,在您的用例中,您提到这不是一个可行的选择。

还有一些想法这个Unix和Linux问题。

相关内容