私は複数のブラウザを使用しており、どのブラウザが開いているかを確認し、すでに開いているブラウザで Web ページを開く bash スクリプトを作成しました。Windows 7 を使用しているため、このスクリプトは Cygwin を使用して実行しています。適切なレジストリ エントリを編集してスクリプトを既定のブラウザとして設定すると、どのプログラムが Web ページを開こうとしても、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
。