Cygwin-Browser-Skriptfehler

Cygwin-Browser-Skriptfehler

Ich verwende mehrere Browser und habe ein Bash-Skript erstellt, das prüft, welcher Browser geöffnet ist, und Webseiten in dem bereits geöffneten Browser öffnet. Ich verwende Windows 7, daher führe ich dieses Skript mit Cygwin aus. Ich habe das Skript als Standardbrowser festgelegt, indem ich die entsprechenden Registrierungseinträge bearbeitet habe. Wenn also ein Programm versucht, eine Webseite zu öffnen, ruft es dieses Skript mit dem Cygwin-Parameter „--login“ auf. Das Skript funktioniert – Seiten werden in dem geöffneten Browser geladen. Wenn das Skript jedoch von einem anderen Programm aufgerufen wird, erhalte ich die Fehlermeldung „Beim Senden des Befehls an das Programm ist ein Problem aufgetreten.“ Das Skript funktioniert, aber ich erhalte trotzdem die Fehlermeldung. Dies geschieht nur, wenn das Skript von einem anderen Programm aufgerufen wird – es gibt keine Fehlermeldung, wenn ich das Skript direkt von der Befehlszeile aus ausführe.

Ich weiß nicht, ob das Skript schuld ist, aber hier ist es:

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

Ich habe versucht, die letzte Zeile in „exit 0“ zu ändern, weil ich davon ausging, dass es ein Problem mit dem Beendigungsstatus gab, aber das hatte keine Wirkung.

Ich wäre wirklich dankbar, wenn mich jemand, der sich mit Cygwin und/oder Windows auskennt, aufklären könnte. Danke!

Antwort1

Ich weiß nicht, was mit Ihrem Originalskript passiert, aber da Sie Windows 7 verwenden, können Sie stattdessen versuchen, Windows PowerShell zu verwenden:

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
}

Speichern Sie dies in einer Datei mit der Erweiterung .ps1und rufen Sie es mit auf PowerShell -WindowStyle Hidden -ExecutionPolicy Bypass -File Path\To\Script.ps1 %1.

verwandte Informationen