1

Я использую несколько браузеров и создал 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

Я попытался изменить последнюю строку на "выход 0", исходя из теории, что была некоторая проблема со статусом выхода, но это не имело никакого эффекта.

Я был бы очень признателен, если бы кто-то умнее, чем Cygwin и / или Windows, смог меня просветить. Спасибо!

1 ответ1

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 .

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .