我使用多种浏览器,并创建了一个 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
。