我想使用 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)
相关链接
- “如何使用默认应用程序从 WSL “打开” 文件?”-- 超级用户
- “Windows 和 Bash 之间的互操作”-- 面向开发人员的 Windows 命令行工具
答案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"
}