注意:我正在 WSL2 中工作,但我的问题完全在于 Linux 方面。如果这不是合适的地方,请告诉我。
每当 .bashrc 来源时我都需要mount --bind
一个目录 - 使用以下命令:
if ! mountpoint -q -- "/mnt/wsl/$WSL_DISTRO_NAME"; then
mount --bind --make-private / "/mnt/wsl/$WSL_DISTRO_NAME"
fi
我收到[预期]错误:only root can use "--bind" option
。
我尝试通过以下方式提升我的用户权限/etc/sudoers
:
[myusername] ALL=(ALL) NOPASSWD: /bin/mount
我还尝试将以下内容添加到/etc/fstab
:
/ /mnt/wsl/Ubuntu-18.04 none bind,user 0 0
但似乎没有什么效果。我想尽可能负责任地完成此任务,而不给予我的用户永久管理员/根权限......或任何其他类似的“懒惰”选项。
答案1
您可以在任何需要 root 权限的命令前加上前缀
wsl.exe -u root <command>
或者,如果您需要将命令用引号引起来:
wsl.exe -u root /bin/sh -c "<command>" \
&& <another command>
这将启动一个单独的 WSL 进程并以 root 身份运行您的命令。您可以将命令全部放在一行中,使用前缀运行多个命令,或者将脚本放入单独的文件中。
请注意,如果您以这种方式以 root 身份运行,显然~
会解析为用户的主目录root
。如果需要访问运行此命令的用户的主目录,请先将其保存到变量中。
例子
wsl.exe -u root service docker status >/dev/null || wsl.exe -u root service docker start >/dev/null
请注意,上述命令不是启动服务的最佳方式,因为您可以添加一个[boot]
条目来wsl.config
代替。因此,您也可以为您的命令执行此操作。
选择
/etc/wsl.conf
[boot]
systemd = true
/etc/wsl.config
[boot]
command="service docker start"
注意事项
wsl.exe -u root
在 WSL 连接的 Visual Studio Code 中打开终端时,将此类用法放入.bashrc 文件中将会中断。 VSCode 具有防止使用此权限升级的保护措施。