我正在编写一个 bash 脚本。我需要在第一个字符出现后添加一个冒号。
/c/Users/ertwr/org/readme.html
为了使用原生 Windows 浏览器打开它们,需要在单位字母后添加一个冒号/c:/Users/ertwr/org/readme.html
我使用以下表达式,它效果非常好,即使对于多个文件或空格也是如此,但仅适用于指定的单位,因为我无法在正则表达式中存储单位字母。
#!/usr/sbin/env bash
IFS=$'\n'
${HOME}/scoop/shims/chrome "${@/\/\c\//\c\:\/}"
问题是仅有的按照字母的书写方式工作 C
。所以我需要一种方法让它独立于字母工作任何信。
我尝试过但对多个文件或带空格的文件不起作用的方法:
- 无法捕获正则表达式
我真的希望这个能够起作用,但我做错了。
#!/usr/sbin/env bash
IFS=$'\n'
regex=(\/[a-zA-Z]\/)
if [[ "$@" =~ "$regex" ]]; then
${HOME}/scoop/shims/chrome "${@/$BASH_REMATCH/${BASH_REMATCH}\:}"
fi
-sed 附加
#!/usr/sbin/env bash
IFS=$'\n'
WADDR=`sed 's|\<[a-zA-Z]\>|&:|' "$@"`
${HOME}/scoop/shims/chrome "${WADDR}"
Sed 特别将文件内容作为 url 而不是文件名称提供。当使用文本文件作为输入时,它可以工作。
答案1
要将 WSL 样式路径转换为 Windows 样式,请使用-w
带有二进制的选项wslpath
。默认情况下WSL 中的挂载路径是/mnt
我在示例中选择的。您可以/mnt
从路径中删除该部分。
例如,
- 命令:
wslpath -w "/mnt/c/Windows/System32"
- 输出:
C:\Windows\System32
要获得更多有效选项,只需执行wslpath
,它将显示帮助页面:
wslpath: Invalid argument
Usage:
-a force result to absolute path format
-u translate from a Windows path to a WSL path (default)
-w translate from a WSL path to a Windows path
-m translate from a WSL path to a Windows path, with '/' instead of '\'
EX: wslpath 'c:\users'
这是一个简单 shell 脚本示例在记事本中打开文本文件:
#! /bin/sh
read -p "Enter WSL style path: " variable
echo "Opening file in Notepad.exe"
/mnt/c/Windows/System32/Notepad.exe $(wslpath -w "$variable")
以下是问题的修改后的 shell 脚本:
#!/bin/sh
IFS=$'\n'
echo "${@}"
WADDR="$(/bin/wslpath -w "${@}")"
/mnt/c/Windows/System32/Notepad.exe "${WADDR}"
更多细节:
答案2
谁知道呢?我自己解决了。
#!/usr/sbin/env bash
IFS=$'\n'
if [[ "$@" =~ \/([a-zA-Z])\/ ]]; then
${HOME}/scoop/shims/chrome "${@/$BASH_REMATCH/\/${BASH_REMATCH[1]}\:\/}"
fi
因此,为了使其与 NT URI 兼容,为了将其提供给二进制文件,我只需要删除其中一个匹配项,/
如下所示。
#!/usr/sbin/env bash
IFS=$'\n'
if [[ "$@" =~ \/([a-zA-Z])\/ ]]; then
${HOME}/scoop/shims/chrome.exe "${@/$BASH_REMATCH/${BASH_REMATCH[1]}\:\/}"
fi
无需自投和白人高手的点赞。只需编码。