部分解决

部分解决

/root/file

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

我只需要在一个窗口中依次打开所有这些网站firefox。这是我的代码

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

nohup也尝试过,但没有成功。

问题是,如果我使用;它,它将绑定到 shell 进程,并且在退出之前不会运行下一个命令firefox,如果我使用nohupor &,它将与 shell 分离,并将打开新窗口firefox而不是新选项卡。在这两种情况下,每个网站都会在新窗口中打开。


部分解决

xdg-open当在 shell 上手动输入命令时,在一个窗口中打开网站,例如

$ 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

但它再次在不同的窗口而不是单个窗口中打开网站。

答案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/nullif部分。

答案2

您只需要:

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

根据 Mozilla 的文档

-url 网址

在新选项卡或窗口中打开 URL,具体取决于浏览器选项。 -url 可以省略。您可以列出多个 URL,并用空格分隔。仅限 Firefox 和 SeaMonkey。

所以你可以把你的脚本写成

#!/bin/bash
firefox $(cat /root/file | tr '\n' ' ') &

相关内容