通过CMD/PowerShell执行多命令WSL指令失败的解决求助
通过CMD/PowerShell执行多命令WSL指令失败的解决求助
我最近在给多个WSL发行版批量安装软件,写了个批处理脚本却碰了壁——直接在CMD里用wsl命令传递多条组合指令时总是报错,但进入WSL内部执行同样的命令却完全正常,有没有大佬能帮忙看看咋解决?
问题复现
我试了这条测试指令:
wsl -u root -d Ubuntu-22.04 "apt-get update && apt-get upgrade -y && apt-get install curl -y"
结果直接抛出错误:
/bin/bash: apt-get update && apt-get upgrade -y && apt-get install curl -y: command not found
但如果先进入WSL环境再执行就完全没问题:
wsl -u root -d Ubuntu-22.04
然后在WSL的shell里输入:
apt-get update && apt-get upgrade -y && apt-get install curl -y
就能正常运行,输出类似:
Hit:1 http://security.debian.org/debian-security bullseye-security InRelease [...]
我的完整脚本(已隐去个人信息)
wsl --shutdown wsl -u root -d Debian "apt-get update && apt-get upgrade -y && apt-get install curl -y" wsl -u root -d Debian "apt-get update && apt-get upgrade -y" wsl -u root -d Debian "apt-get install build-essential libssl-dev zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev libncursesw5-dev xz-utils tk-dev libxml2-dev libxmlsec1-dev libffi-dev liblzma-dev gh git vim bat" wsl -u root -d Ubuntu-16.04 "apt-get update && apt-get upgrade -y && apt-get install curl -y" wsl -u root -d Ubuntu-16.04 "type -p curl >/dev/null || apt-get install curl -y curl -fsSL https://cli.github.com/packages/githubcli-archive-keyring.gpg | dd of=/usr/share/keyrings/githubcli-archive-keyring.gpg && chmod go+r /usr/share/keyrings/githubcli-archive-keyring.gpg && echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/githubcli-archive-keyring.gpg] https://cli.github.com/packages stable main" | tee /etc/apt-get/sources.list.d/github-cli.list > /dev/null" wsl -u root -d Ubuntu-16.04 "apt-get update && apt-get upgrade -y" wsl -u root -d Ubuntu-16.04 "apt-get install build-essential libssl-dev zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev libncursesw5-dev xz-utils tk-dev libxml2-dev libxmlsec1-dev libffi-dev liblzma-dev gh git vim bat" wsl -u root -d Ubuntu-16.04 "curl https://pyenv.run | /bin/bash" wsl -u root -d Ubuntu-16.04 "echo 'export PATH="$HOME/.pyenv/bin:$PATH"' >> /home/username/.bashrc" wsl -u root -d Ubuntu-16.04 "echo 'eval "$(pyenv init --path)"' >> /home/username/.bashrc" wsl -u root -d Ubuntu-16.04 "echo 'eval "$(pyenv virtualenv-init -)"' >> /home/username/.bashrc" wsl -u root -d Ubuntu-20.04 "apt-get update && apt-get upgrade -y && apt-get install curl -y" wsl -u root -d Ubuntu-20.04 "type -p curl >/dev/null || apt-get install curl -y curl -fsSL https://cli.github.com/packages/githubcli-archive-keyring.gpg | dd of=/usr/share/keyrings/githubcli-archive-keyring.gpg && chmod go+r /usr/share/keyrings/githubcli-archive-keyring.gpg && echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/githubcli-archive-keyring.gpg] https://cli.github.com/packages stable main" | tee /etc/apt-get/sources.list.d/github-cli.list > /dev/null" wsl -u root -d Ubuntu-20.04 "apt-get update && apt-get upgrade -y" wsl -u root -d Ubuntu-20.04 "apt-get install build-essential libssl-dev zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev libncursesw5-dev xz-utils tk-dev libxml2-dev libxmlsec1-dev libffi-dev liblzma-dev gh git vim bat" wsl -u root -d Ubuntu-18.04 "apt-get update && apt-get upgrade -y && apt-get install curl -y" wsl -u root -d Ubuntu-18.04 "type -p curl >/dev/null || apt-get install curl -y curl -fsSL https://cli.github.com/packages/githubcli-archive-keyring.gpg | dd of=/usr/share/keyrings/githubcli-archive-keyring.gpg && chmod go+r /usr/share/keyrings/githubcli-archive-keyring.gpg && echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/githubcli-archive-keyring.gpg] https://cli.github.com/packages stable main" | tee /etc/apt-get/sources.list.d/github-cli.list > /dev/null" wsl -u root -d Ubuntu-18.04 "apt-get update && apt-get upgrade -y" wsl -u root -d Ubuntu-18.04 "apt-get install build-essential libssl-dev zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev libncursesw5-dev xz-utils tk-dev libxml2-dev libxmlsec1-dev libffi-dev liblzma-dev gh git vim bat" wsl -u root -d Ubuntu-18.04 "curl https://pyenv.run | /bin/bash" wsl -u root -d Ubuntu-18.04 "echo 'export PATH="$HOME/.pyenv/bin:$PATH"' >> /home/username/.bashrc" wsl -u root -d Ubuntu-18.04 "echo 'eval "$(pyenv init --path)"' >> /home/username/.bashrc" wsl -u root -d Ubuntu-18.04 "echo 'eval "$(pyenv virtualenv-init -)"' >> /home/username/.bashrc" wsl -u root -d Ubuntu-22.04 "apt-get update && apt-get upgrade -y && apt-get install curl -y" wsl -u root -d Ubuntu-22.04 "type -p curl >/dev/null || apt-get install curl -y curl -fsSL https://cli.github.com/packages/githubcli-archive-keyring.gpg | dd of=/usr/share/keyrings/githubcli-archive-keyring.gpg && chmod go+r /usr/share/keyrings/githubcli-archive-keyring.gpg && echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/githubcli-archive-keyring.gpg] https://cli.github.com/packages stable main" | tee /etc/apt-get/sources.list.d/github-cli.list > /dev/null" wsl -u root -d Ubuntu-22.04 "apt-get update && apt-get upgrade -y" wsl -u root -d Ubuntu-22.04 "apt-get install build-essential libssl-dev zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev libncursesw5-dev xz-utils tk-dev libxml2-dev libxmlsec1-dev libffi-dev liblzma-dev gh git vim bat"
补充说明
脚本里Pyenv和GitHub CLI的安装命令都是照着官方文档写的,现在就是卡在批量执行这一步——每条带&&的组合命令都没法通过wsl直接调用执行,求各位大佬指点迷津!
备注:内容来源于stack exchange,提问作者eccentricOrange
相关产品推荐
相关产品推荐

