Cygwin 浏览器脚本错误

Cygwin 浏览器脚本错误

我使用多种浏览器,并创建了一个 bash 脚本,用于检查哪个浏览器处于打开状态,并在已打开的浏览器中打开网页。我使用 Windows 7,因此我使用 Cygwin 运行此脚本。我通过编辑相应的注册表项将脚本设置为默认浏览器,因此每当任何程序尝试打开网页时,它都会使用 Cygwin 的“--login”参数调用此脚本。脚本可以正常工作 - 页面可以在任何打开的浏览器中加载。但是,每当另一个程序调用该脚本时,我都会收到错误消息“向程序发送命令时出现问题”。脚本可以正常工作,但我还是会收到错误消息。这种情况仅发生在另一个程序调用该脚本时 - 如果我直接从命令行运行该脚本,则不会出现错误消息。

我不知道脚本是否有问题,但是它是这样的:

#! /bin/bash

if ps -W | grep -v grep | grep waterfox.exe >/dev/null
    then
        "/cygdrive/c/Program Files/Waterfox/waterfox.exe" -requestPending -osint -url "$1"
    elif ps -W | grep -v grep | grep firefox.exe >/dev/null
    then
        "/cygdrive/c/Program Files (x86)/Mozilla Firefox/firefox.exe" -requestPending -osint -url "$1"
    elif ps -W | grep -v grep | grep chrome.exe >/dev/null
    then
        "/cygdrive/c/Users/Morgan/AppData/Local/Google/Chrome/Application/chrome.exe" -- "$1"
    else
        cygstart "/cygdrive/c/Program Files/Waterfox/waterfox.exe" -requestPending -osint -url "$1"
fi
exit

我尝试将最后一行改为“exit 0”,因为理论上退出状态存在一些问题,但这没有任何效果。

如果有谁对 Cygwin 和/或 Windows 有更深的了解,可以给我一些启发,我将不胜感激。谢谢!

答案1

我不知道您的原始脚本发生了什么,但考虑到您正在运行 Windows 7,您可以尝试使用 Windows PowerShell:

Param([string] $Url)


function Count-Process ([string] $Name) {
    return (Get-Process -Name $Name -ErrorAction SilentlyContinue).Count
}

function Invoke-Browser ([string] $Url) {
    if ((Count-Process waterfox) -gt 0) {
        & "C:\Program Files\Waterfox\waterfox.exe" -requestPending -osint -url $Url
    } elseif ((Count-Process firefox) -gt 0) {
        & "C:\Program Files (x86)\Mozilla Firefox\firefox.exe" -requestPending -osint -url $Url
    } elseif ((Count-Process chrome) -gt 0) {
        & "${Env:LocalAppData}\Google\Chrome\Application\chrome.exe" -- $Url
    } else {
        & "C:\Program Files\Waterfox\waterfox.exe" -requestPending -osint -url $Url
    }
}


if ($MyInvocation.InvocationName -ne '.') {
    Invoke-Browser $Url
}

将其保存在带有扩展名的文件中.ps1,并用 调用它PowerShell -WindowStyle Hidden -ExecutionPolicy Bypass -File Path\To\Script.ps1 %1

相关内容