脚本没有进入后台

脚本没有进入后台

我正在尝试编写一个简单的脚本来启用我的 Leap Motion 控制器。启用设备需要打开服务并启动控制面板。我遇到的问题是,服务不会进入后台,也不会释放我的终端。

该脚本非常简单,位于我的 $USER bin 中。

#!/bin/bash
LeapControlPanel &
sudo leapd &

在此处输入图片描述

忽略关键的 Web 套接字内容,我向您保证控制器可以工作,唯一的问题是,我希望服务返回我的提示。

答案1

脚本已转入后台并返回了提示。问题是您没有将其输出重定向到任何地方,因此它仍出现在您的终端中。将命令发送到后台只意味着它将继续运行,您可以在父 shell 中执行其他操作。但是,由于命令正在运行,其输出(stdout 和 stderr)仍连接到您当前的终端,这就是您仍然看到它们的原因。

因此,要向后台发送命令隐藏其输出,你需要:

  1. 仅重定向标准输出,以便任何错误消息仍然打印到终端:

    ./leap > leap.log &
    
  2. 仅重定向 stderr,以便终端上仍出现输出但不出现错误:

    ./leap 2> leap.log &
    
  3. 重定向两者,以便不将任何内容打印到终端:

    ./leap > leap.log 2>&1 &
    

    或者(如果你的 shell 支持的话)

    ./leap &> leap.log &
    

在所有示例中,要丢弃输出而不是保存到文件,请使用/dev/null而不是leap.log

答案2

它做了返回提示符——它位于屏幕截图的第二行。错误消息只是弄乱了显示。尝试输入命令,你会发现它有效。或者输入 Enter 以获取新提示符。

相关内容