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


2

过去 https://askubuntu.com/a/1108609/912537 我建议了一种从windows编辑grub的方法。我在/ boot / efi / EFI / grub上安装了grub,并且一直在尝试创建一个更改Grub Environment Block中“next_entry”变量的脚本。

双启动Win10和Debian9,我有WSL运行Debian(Bash on Win)。

我正在尝试使用脚本作为Linux快捷方式的重启,因为我的BT键盘在GRUB中不起作用。我在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'

reboot-to-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 - 奇怪的是,这些命令中的每一个都在各自的控制台中单独工作,我显然没有正确编写脚本。

编写这些脚本的正确方法是什么?

Answers:


0

实际上,这两个脚本都是可用的,但批处理命令可以由行包装

@powershell -c " "

要从终端外部运行,对于shell脚本 - 不要编写脚本 记事本 人。是的,一个新手的错误,Windows让我自满。 FYI记事本和其他Windows编辑器使用“回车,换行”作为他们的新行(/ r / n),而Linux只需要一个换行符(/ n),这样就会破坏脚本。

另外,更好的想法是将shell脚本存储在wsl文件系统中而不是/ mnt / c中的某个位置 - 只是让窗口远离它。你有它 - 可点击的重启快捷方式从Linux到Windows再次返回!我想这些天我会看到越来越少的Windows。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.