对特定 PID 运行附加命令

对特定 PID 运行附加命令

我对 Linux 完全陌生,所以如果这看起来像是一个荒谬的问题,请原谅我。

我正在尝试在 Firefox 上打开新选项卡,而无需来自终端的 url。所以我的命令是:

$ firefox -new-tab -search foo1

现在,当我尝试再次执行此操作,希望它打开一个新选项卡来搜索新项目时,请说:

$ firefox -new-tab -search foo2

它会打开一个新窗口。所以我有这样的想法,也许如果我可以获得以前浏览器的 PID,我可以在该 PID 上运行新选项卡命令,这样新选项卡实际上会在同一个窗口上打开。如果我运行以下命令,我可以相对轻松地获取 PID:

$ firefox -new-tab -search foo1 </dev/null >/dev/null 2>&1 &

但实际上我完全不知道如何使用 PID 在该 PID 上执行新命令。

任何和所有的意见都值得赞赏。谢谢!

答案1

无论如何,您正在与之交互的 Firefox 浏览器,无论它显示多少个窗口,都只是一个“主”PID(实际的网站工作人员在自己的进程中运行,并通过一些定义良好的接口与主进程进行通信)。 “窗口”和“PID”之间不存在一一对应的关系。

因此,遗憾的是,解决 Firefox 命令行错误(--search总是打开一个新窗口)不会像您想象的那样工作。

我已经考虑过这个问题,但遗憾的是,如果不编写浏览器扩展或在另一个程序中检测浏览器,就无法告诉 Firefox 打开新选项卡并对默认搜索引擎执行查询。

所以,我能为你提供的最好的就是:

  1. 选择您选择的搜索引擎,并记下查询 URL。 (最简单的方法是搜索一个随机字符串,例如“qwert”,然后在心里用占位符替换它,例如https://duckduckgo.com/?q=qwert变成https://duckduckgo.com/?q=<placeholder>
  2. 将该 URL 与以下内容一起使用--new-tab
searchword="strange women lying in ponds distributing swords"
encoded="$(perl -MURI::Escape -e 'print uri_escape($ARGV[0]);' "${searchword}")"
firefox --new-tab "https://duckduckgo.com/?q=${encoded}"

显然,给鸭子称重的方法不止一种。我更愿意使用firefox --new-tab "$(trurl --url 'https://duckduckgo.com/' --append "query=q=${searchword}")"Perl 调用,但trurl在许多 Linux 发行版上尚不可用。

无论如何,无论你怎么做,这都不是很好用。为了使其更好用,您需要将其放入名为“websearch”的文本文件中:

#!/bin/bash
searchwords="$@"
encoded="$(perl -MURI::Escape -e 'print uri_escape($ARGV[0]);' "${searchwords}")"
firefox --new-tab "https://duckduckgo.com/?q=${encoded}"

假设它位于bin/您的主目录中的一个目录中;通过运行使其可执行chmod a+x ~/bin/websearch。现在你可以使用它:

~/bin/websearch What is the air-speed velocity of an unladen swallow

相关内容