![如何在 Windows Subsystem for Linux(WSL)中编写脚本并从批处理文件中调用它?](https://linux22.com/image/1579139/%E5%A6%82%E4%BD%95%E5%9C%A8%20Windows%20Subsystem%20for%20Linux%EF%BC%88WSL%EF%BC%89%E4%B8%AD%E7%BC%96%E5%86%99%E8%84%9A%E6%9C%AC%E5%B9%B6%E4%BB%8E%E6%89%B9%E5%A4%84%E7%90%86%E6%96%87%E4%BB%B6%E4%B8%AD%E8%B0%83%E7%94%A8%E5%AE%83%EF%BC%9F.png)
在https://askubuntu.com/a/1108609/912537我建议了一种从 Windows 编辑 grub 的方法。我在 /boot/efi/EFI/grub 上安装了 grub,并一直在尝试创建一个脚本来更改 Grub 环境块中的“next_entry”变量。
双启动 Win10 和 Debian9,我有运行 Debian 的 WSL(Win 上的 Bash)。
由于我的蓝牙键盘在 GRUB 中不起作用,我尝试使用脚本作为重启 Linux 的快捷方式。我可以从 Linux 反向操作,效果很好。我有一个批处理文件和一个 shell 脚本(不是)协同工作。代码如下:
重启到linux.bat
@echo off
mountvol s: /S
wsl /mnt/c/Users/<username>/Documents/User_scripts/reboot-to-linux.sh
mountvol s: /D
Restart-Computer -Computername 'localhost'
重启到linux.sh
#!/bin/bash
sudo mount -t drvfs s: /mnt/s
sudo grub-editenv /mnt/s/EFI/grub/grubenv set next_entry=0
sudo umount /mnt/s
这是我收到的错误:
/mnt/s 不存在
grub-editenv:错误:无法打开“/mnt/s/EFI/grub/grubenv.new”:没有此文件或目录。
umount:/mnt/s:未安装
这告诉我 mount 命令无法将 s:windows 挂载点挂载到 /mnt/s 上 - 奇怪的是,这些命令中的每一个都在各自的控制台中单独工作,我显然没有正确编写脚本。
编写这些脚本的正确方法是什么?
答案1
事实上,这两个脚本都是可用的,但是批处理命令可以用以下行包装:
@powershell -c " "
从终端外部运行,至于 shell 脚本 - 不要将脚本写在记事本人。是的,一个新手错误,Windows 让我自满。仅供参考,记事本和其他 Windows 编辑器使用“回车、换行”作为新行 (/r/n),而 Linux 只需要换行 (/n),因此这会破坏脚本。
此外,更好的想法是将您的 shell 脚本存储在 wsl 文件系统中,而不是 /mnt/c 中的某个位置 - 只需让 Windows 远离它即可。就是这样 - 可点击的重启快捷方式从 Linux 到 Windows 再返回!我想这些天我会越来越少看到 Windows。