【问题标题】:run Mac Chrome with command line arguments as a background process使用命令行参数运行 Mac Chrome 作为后台进程
【发布时间】:2011-09-06 05:51:03
【问题描述】:

我的 .bash_profile 文件中有 2 个别名,其中包含:

alias chrome="/Applications/Google\\ \\Chrome.app/Contents/MacOS/Google\\ \\Chrome"
alias chromex="chrome --disable-web-security"

但是在运行时,它会打开 Chrome,但会一直保持终端窗口...一旦我关闭终端窗口,它也会关闭 chrome。

有没有办法让它在后台运行?

我记得我将它用于thin 网络服务器和thin start -dthin start --daemonize

谢谢


更新

除了 James 的回答之外,我还发现了 nohup 命令行,通过将 & 附加到 nohup 命令,我可以毫无问题地退出终端:

$ nohup chromex &

默认输出写入nohup.out文件

要停止工作,我可以运行 ps ax,通过正确的命令找到 PID,然后找到 kill -9 PID

【问题讨论】:

    标签: google-chrome daemon arguments background-process


    【解决方案1】:

    在命令行末尾添加一个 & 号。

    alias chrome="/Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome &"
    

    如果您也不想看到任何调试 chrome 输出,请将 stdout 和 stderr 重定向到 /dev/null

    alias chrome="/Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome 2>&1 > &"
    

    在 Mac 上,您可以更简单:

    alias chrome="open /Applications/Google\ Chrome.app/ --args --disable-web-security"
    

    不过,您的第二个要求使这有点棘手。 & 需要在命令行的末尾;但是您的第二个别名将命令添加到第一个命令的末尾 - 即,在&符号之后 - 所以这不起作用。

    为了解决这个问题,我们可以将“chrome”重新定义为一个函数。

    chrome () {
      /Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome $* 2>&1 &
    }
    

    $* 表示传递给函数的任何命令行参数都将插入到这里,在 & 符号之前。这意味着您仍然可以将第二个别名定义为

    alias chromex="chrome --disable-web-security"
    

    这将扩展为

    /Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome --disable-web-security 2>&1 &
    

    顺便说一句,这只是被称为“在后台”运行。 “作为守护进程”指的是在机器开启时运行的服务器进程,并且不依赖于任何用户的会话。

    【讨论】:

    • 嗨,詹姆斯,感谢有关守护进程的信息,很高兴知道我错误地称呼它...只是更改了问题标题 :) 不幸的是,在行尾添加了 &没有帮助,特别是在传递 chromex 之类的参数时,如果我关闭终端,它会同时关闭 chrome....以及第二个 2>&1 > &1 指责:syntax error near unexpected token newlineopen 命令只能在不传递参数的情况下工作我相信?
    • 您好,詹姆斯,这成功了 open /Applications/Google\ Chrome.app/ --args --disable-web-security 我相信您必须在 --args 标志之后传递参数...我刚刚编辑了您的答案,因此我可以将其标记为正确 :) 谢谢
    • 你是对的;我错过了您的第一个别名正在调用第二个别名。 & 必须出现在该行的末尾 - 所以是的,尝试在此之后放置参数会中断。让我编辑我的评论,让它稍微复杂一点,用一个函数......
    • 很好的补充:“--args”。我没有发现你的那部分要求,但即使我发现了,我也不知道你能做到。
    • Re:当你的终端关闭时,chrome 会关闭。我在 OSX 中从未使用 terminal.app 或 iTerm2 发生过这种情况。我知道你的意思——我在 Linux 上遇到过各种终端(我觉得即使在 mac 上也应该发生这种情况——事实上,当我关闭终端时,它警告我关闭终端将关闭 Chrome)。 ..但它只是没有发生在我身上,我不知道为什么。 (当我输入这个时,我关闭了我用来启动这个 Chrome 副本的终端,但显然 Chrome 仍然在这里,即使终端声称它会消失)
    【解决方案2】:

    我在我的 .zshr(.bash_profile 相同)上定义了别名,如下所示:

    open_by_browser(){ open -a $1 $2}
    alias firefox='open_by_browser firefox'
    alias chrome='open_by_browser "Google Chrome"'
    

    然后我可以通过 Firefox 或 Chrome 打开 html 文件

    例如,通过 Firefox

    firefox xxx/index.html
    

    通过 Chrome

    chrome xxx/index.html
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-28
      • 2014-12-21
      • 1970-01-01
      • 2014-09-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多