如何在 Windows Subsystem for Linux(WSL)中编写脚本并从批处理文件中调用它?

如何在 Windows Subsystem for Linux(WSL)中编写脚本并从批处理文件中调用它?

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。

相关内容