如何在 Windows 上的 bash 中使用启动命令

如何在 Windows 上的 bash 中使用启动命令

我想使用 Windows 的start命令在 Windows 上的 Ubuntu 上的 bash 中(即 WSL)。但是,我无法通过简单地输入以下内容来使用它start

nek@NEK:/mnt/c/Users/Nek$ start test.txt
Command 'start' is available in '/sbin/start'
The command could not be located because '/sbin' is not included in the PATH environment variable.
This is most likely caused by the lack of administrative privileges associated with your user account.
start: command not found

我注意到这start.exe可能不存在。

C:\Users\Nek>where start
INFO: Could not find files for the given pattern(s).

start内置命令吗?我们可以start在 bash 中使用吗?

环境

  • Windows 10 内部版本 14393.693 (更新:此版本对于.exe在 bash 上执行文件来说太旧了。我应该更新 Windows 版本 >= 14951,然后按照答案操作。)
  • Windows 上的 Ubuntu 上的 Bash(bash 4.3.11(1)-release x86_64-pc-linux-gnu,Ubuntu 14.04)

相关链接

答案1

在其他答案中,cmd.exe建议。然而,命令提示符不支持 UNC 路径。WSL2 中的 Linux 文件系统在 Windows 中表示为 UNC 路径。

在这种情况下,更好的选择是电源外壳借用Alex G的函数,将其重写为:

function start {
  abspath=$(readlink -f "$1");
  wpath=$(/bin/wslpath -w "$abspath");
  powershell.exe -Command Start-Process "$wpath"
}

[interop] appendWindowsPath = false如果您已通过添加到禁用 Windows PATH 的添加/etc/wsl.conf,则使用通过 获取的绝对路径where powershell.exe

function start {
  abspath=$(readlink -f "$1");
  wpath=$(/bin/wslpath -w "$abspath");
  /mnt/c/WINDOWS/System32/WindowsPowerShell/v1.0//powershell.exe -Command Start-Process "$wpath"
}

将其添加到您的.bashrc以确保在每个会话中都有它。

用法:

  • start .- 在 Windows 文件资源管理器中打开当前目录。
  • start /any/linux/path- 将 Linux 目录作为 UNC 路径打开。
  • start /mnt/c/any/windows/path- 将 Windows 文件夹作为常规路径打开。
  • start- 强制 PowerShell 命令提示您输入路径。输入路径,例如.或 Windows/UNC 路径(Linux 路径在这里不起作用)或按Ctrl-C取消。
    • 也许可以增强该功能以处理这种极端情况。我把这留给你作为练习。

答案2

启动是内置命令吗?

是的。

内部命令

Windows CMD shell CMD.exe 包含许多“内部”命令,其他“外部”命令也作为单独的可执行文件提供。外部命令通常存储在 C:\WINDOWS\System32 文件夹中,该文件夹是系统 PATH 的一部分。

这种安排意味着无论当前目录是什么,内部和外部命令始终可用。

ASSOC、BREAK、CALL、CD/CHDIR、CLS、COLOR、COPY、DATE、DEL、DIR、DPATH、ECHO、ENDLOCAL、ERASE、EXIT、FOR、FTYPE、GOTO、IF、KEYS、MD/MKDIR、MKLINK(vista 及以上版本)、MOVE、PATH、PAUSE、POPD、PROMPT、PUSHD、REM、REN/RENAME、RD/RMDIR、SET、SETLOCAL、SHIFT、START、TIME、TITLE、TYPE、VER、VERIFY、VOL

来源语法内部


我们可以在 bash 中使用 start 吗?

是的。启动命令 shell 并运行启动命令。

例子:

cmd.exe /c start "" test.txt

如果这不起作用,请指定完整路径,如下所示:

/mnt/c/Windows/system32/cmd.exe /c start "" test.txt

进一步阅读

  • Windows CMD 命令行的 AZ 索引- 与 Windows cmd 行相关的所有事物的绝佳参考。
  • 命令- 启动一个新的 CMD shell 并(可选)运行命令/可执行程序。
  • 开始- 启动程序、命令或批处理脚本(在新窗口中打开)。

答案3

上述答案对我不起作用 - cmd.exe 需要的是 windows 路径 ( C:\this\that),而不是 linux 路径。以下 shell 函数帮助我启动并运行:

function start {
    abspath=$(readlink -f "$1");
    wpath=$(/bin/wslpath -w "$abspath");
    /c/Windows/System32/cmd.exe /c start "" "$wpath"
}

相关内容