Error de secuencia de comandos del navegador Cygwin

Error de secuencia de comandos del navegador Cygwin

Utilizo varios navegadores y creé un script bash que verifica qué navegador está abierto y abre páginas web en cualquier navegador que ya esté abierto. Utilizo Windows 7, así que ejecuto este script usando Cygwin. Configuré el script como navegador predeterminado editando las entradas de registro apropiadas, de modo que cada vez que un programa intenta abrir una página web, llama a este script usando el parámetro "--login" de Cygwin. El script funciona: las páginas se cargan en cualquier navegador que esté abierto. Sin embargo, cada vez que otro programa llama al script, aparece el mensaje de error "Hubo un problema al enviar el comando al programa". El script funciona, pero de todos modos aparece el mensaje de error. Esto solo sucede cuando otro programa llama al script; no aparece ningún mensaje de error si ejecuto el script directamente desde la línea de comando.

No sé si el script tiene la culpa, pero aquí está:

#! /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

Intenté cambiar la última línea a "salida 0" basándose en la teoría de que había algún problema con el estado de salida, pero eso no tuvo ningún efecto.

Realmente agradecería que alguien más sabio en Cygwin y/o Windows pudiera ilustrarme. ¡Gracias!

Respuesta1

No sé qué está pasando con tu script original, pero considerando que estás ejecutando Windows 7, puedes intentar usar Windows PowerShell en su lugar:

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
}

Guarde esto en un archivo con extensión .ps1y llámelo con PowerShell -WindowStyle Hidden -ExecutionPolicy Bypass -File Path\To\Script.ps1 %1.

información relacionada