在 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问题。