如何将 WSL shell 设置为 shell 脚本的默认应用程序?

如何将 WSL shell 设置为 shell 脚本的默认应用程序?

我已经使用 Ubuntu 设置了我的 wsl,并安装了一些简单的应用程序,如 zip/unzip。

我有一个简单的 shell 脚本,并尝试将其设置为使用 WSL 自动打开,但在寻找选项时遇到了麻烦。

如果我从 wsl 命令窗口执行 shell 脚本,它可以正常工作。但是,我想双击它并让它自动运行。

查看Open With...菜单,我找不到 WSL 或 Ubuntu 作为选项。

更新:

我可以wsl [command]从批处理文件调用,但更愿意执行 shell 脚本。

答案1

通常,您需要手动配置它。不幸的是,“使用 ... 打开”操作始终传递 Windows 路径。Bash(或您在 WSL 中运行的任何 shell)不理解 Windows 路径。与适用于 Windows 或 Cygwin 的 Git Bash 不同,这是实际的Linux bash您正在使用的二进制文件,因此它无法解释 Windows 路径。

此外,一个重要的区别是 Windows 根据扩展名确定文件类型(以及要采取的操作),但 Linux 中的 shell 脚本可以任何扩大。

我假设您将使用类似于test.sh扩展名的名称来命名您的 shell 脚本,以使此功能正常工作。

因此,我们至少可以通过两种不同的方式解决这个问题:

  • 选项 1:设置文件的默认“打开方式...” .sh

    为了建立默认的双击操作,我相信您需要使用此方法。

    要将正确的命令行传递到 WSL,我们首先需要将其传递给处理 Windows 路径。为此,我们将使用一个简单的 Windows 脚本文件 ( .cmd)。将其放置在您喜欢的位置;可能类似于%userprofile%\Documents\scripts\WSL Launcher.cmd。添加以下内容:

    @echo off
    wsl -e sh -c "\"$(wslpath '%1')\""
    PAUSE
    

    它使用 POSIX(或与您的发行版最接近的版本)shell 运行 WSL,将传入的 Windows 路径转换为 ​​Linux 路径,并尝试执行它。

    此外,当我们进行此操作时,请使用%userprofile%\Documents\scripts\test.sh以下内容进行尝试:

    #!/usr/bin/env bash
    echo "Hello from WSL Bash"
    

    旁注:确保使用 Linux 行尾创建此文件并将其设置为可执行文件。

    然后:

    • 右键单击test.sh文件
    • 打开用->选择默认程序->更多应用程序->在此电脑上查找其他应用
    • 浏览到WSL Launcher.cmd你创建的打开

    您应该看到正确的输出,其中“按任意键继续...”

    当然,要将其设置为默认的双击操作,请重复上述过程,但在“在此电脑上查找其他应用程序”之前,请选中“始终使用此应用程序打开.sh 文件”选项。

    附注:如上所述,Linux 不关心文件扩展名,因此此 CMD 实际上会运行任何事物可以在具有.sh扩展名的 Linux 命令行中执行。您甚至可以故意做一些疯狂的事情,例如重命名ls(或任何二进制文件),然后ls.sh此脚本将执行它。

    这可能是不是这是一种安全风险,因为任何以这种方式运行的东西都可以通过在 shell 脚本中运行它来轻松执行;这是需要注意的事情。

  • 选项 2:将右键单击操作与.sh文件或其他文件扩展名关联,以在其上运行脚本。

    这不会为您带来双击功能,但如果您想要一种更灵活的方式来处理启动 WSL 的右键单击操作,可以通过 Windows shell 操作来实现。 Shell 操作可以附加到特定扩展名或通配符(“*”)以针对所有文件运行。

    例如,你提到设置zip/unzip,所以我建议你参考这个答案其中包括(在答案的下半部分).lrz使用 Windows 中的右键菜单设置脚本来处理 WSL 内部文件的步骤。

    这可以扩展到与上面的“打开方式”相同的概念。您只需要更改命令行。由于 shell 操作可以使用带有参数的任意命令行,因此您无需设置中间脚本.cmd

相关内容