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