部分的な解決策

部分的な解決策

/root/file持つ

https://stackoverflow.com
https://stackexchange.com
https://reddit.com

1つのウィンドウでこれらすべてのウェブサイトを順番に開く必要がありますfirefox。これは私のコードです

#!/bin/bash
while read line
do 
    if pgrep firefox; 
    then 
        firefox --new-tab "$line" ; 
    else 
        firefox "$line" ;
    fi 
done < /root/file

nohupも試してみましたが、成功しませんでした。

問題は、;これを使用すると、シェルプロセスにバインドされ、終了する前に次のコマンドを実行しないことです。または、firefox使用するとシェルから切り離され、新しいタブの代わりに新しいウィンドウが開きます。どちらの場合も、各ウェブサイトが新しいウィンドウで開きます。nohup&firefox


部分的な解決策

xdg-openシェルで手動でコマンドを入力した場合は、ウィンドウでWebサイトを開きます。

$ xdg-open https://stackoverflow.com
$ xdg-open https://stackexchange.com
$ xdg-open https://reddit.com

しかし、スクリプトでは機能しません。次のスクリプトがありますxdg-open

#!/bin/bash
while read line
do 
    xdg-open "$line"
done < /root/file

ただし、今回も単一のウィンドウではなく別のウィンドウでWebサイトが開きます。

ベストアンサー1

問題は、Firefoxの起動に時間がかかることです。バックグラウンドで実行すると、次回実行したときにfirefox --new-tab最初のインスタンスがまだ完全に起動しておらず、別のタブを開く準備ができていません。最初のFirefoxインスタンスを起動してからしばらく待つ必要があります。

#!/bin/bash
while read line
do
    if pgrep -u $USER firefox > /dev/null
    then
        firefox --new-tab "$line" &
    else
        firefox "$line" &
        sleep 3                 # You may want to tune this value
    fi < /dev/null
done < /root/file

この構成では、ループ内のすべてのプログラムが内容を食べることができ、stdinループが早期に終了する可能性があります。そのため、予防措置として< /dev/nullそのセクションを追加しました。if

おすすめ記事