/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
,如果我使用nohup
or &
,它将与 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/null
该if
部分。
答案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' ' ') &