Bash 如何从脚本在虚拟环境中运行程序

Bash 如何从脚本在虚拟环境中运行程序,bash,shell,raspberry-pi,virtualenv,google-assistant-sdk,Bash,Shell,Raspberry Pi,Virtualenv,Google Assistant Sdk,我已经在我的Raspberry Pi上设置了google assistant sdk,如下所示: 现在为了重新运行助手,我计算出两个命令 $ source env/bin/activate 及 但是,我想将这个过程自动化为一个脚本,我可以从rc.local(后面是&)调用该脚本,以便让助手从启动时启动 但是如果我运行一个简单的脚本 #!/bin/bash source env/bin/activate google-assistant-demo 助手不在环境中运行 我的环境路径是/home/

我已经在我的Raspberry Pi上设置了google assistant sdk,如下所示:

现在为了重新运行助手,我计算出两个命令

$ source env/bin/activate

但是,我想将这个过程自动化为一个脚本,我可以从
rc.local
(后面是
&
)调用该脚本,以便让助手从启动时启动

但是如果我运行一个简单的脚本

#!/bin/bash
source env/bin/activate
google-assistant-demo
助手不在环境中运行 我的环境路径是
/home/pi/env/bin/activate
如何让脚本启动环境,然后在虚拟环境中运行助手

编辑:最后我采用了以下方法:

以此为基础: –感谢Eric Parisot

您需要使用并将其内容提取到
/home/pi/src/

但是有一些变化

我没有将
gassist.sh
作为
sudo
运行,因为它给了我以下错误:

OpenAlsaHandle PcmOpen: No such file or directory
[7689:7702:ERROR:audio_input_processor.cc(756)] Input error
ON_MUTED_CHANGED:
{‘is_muted’: False}
ON_START_FINISHED
ON_ASSISTANT_ERROR:
{‘is_fatal’: True}
[7689:7704:ERROR:audio_input_processor.cc(756)] Input error
ON_ASSISTANT_ERROR:
{‘is_fatal’: True}
OpenAlsaHandle PcmOpen: No such file or directory
[7689:7702:ERROR:audio_input_processor.cc(756)] Input error
ON_MUTED_CHANGED:
{‘is_muted’: False}
ON_START_FINISHED
ON_ASSISTANT_ERROR:
{‘is_fatal’: True}
[7689:7704:ERROR:audio_input_processor.cc(756)] Input error
ON_ASSISTANT_ERROR:
{‘is_fatal’: True}
修正:不要以sudo运行

如果
gassist.sh
给出了关于
RPi.GPIO
的错误,您需要执行以下操作:

然后我做了
sudo nano/etc/profile
并在结尾附加了以下内容:

#Harvs was here on 24/06/17
if pidof -x "gassist.sh" >/dev/null; then
    echo ""
    echo "/etc/profile says:"
    echo "An instance of Google Assistant is already running, will not start again"
    echo ""
else
    echo "Starting Google Assistant..."
    echo "If you are seeing this, perhaps you have SSH within seconds of reboot"
    /home/pi/src/gassist.sh &
fi
#Harvs was here on 24/06/17
if pidof -x "gassist.sh" >/dev/null; then
    echo ""
    echo "/etc/profile says:"
    echo "An instance of Google Assistant is already running, will not start again"
    echo ""
else
    echo "Starting Google Assistant..."
    echo "If you are seeing this, perhaps you have SSH within seconds of reboot"
    /home/pi/src/gassist.sh &
fi

现在它工作得很好,在虚拟环境中:)

脚本从
rc运行。local
在根目录中执行(或者可能在
根用户的主目录中执行,我想这取决于发行版)

简单的解决方法是对环境的完整路径进行编码

#!/bin/bash
source /home/pi/env/bin/activate
google-assistant-demo
# or maybe /home/pi/google-assistant-demo

无需在
rc.local

脚本中明确设置背景,脚本从
rc.local
运行,在根目录中执行(或者可能在
根用户的主目录中执行,我想这取决于发行版)

简单的解决方法是对环境的完整路径进行编码

#!/bin/bash
source /home/pi/env/bin/activate
google-assistant-demo
# or maybe /home/pi/google-assistant-demo
无需在
rc.local

中明确说明任何内容的背景。可在此处找到解决方案:

在根目录中创建一个启动shell脚本(我将其命名为“launch”),并使其可执行:

sudo nano launch.sh
我是这样写的:

#!/bin/bash
source /home/pi/env/bin/activate
/home/pi/env/bin/google-assistant-demo
保存文件

编辑LXDE pi自动启动文件

sudo nano /home/pi/.config/lxsession/LXDE-pi/autostart
将此添加到该文件的底部

./launch.sh
重新启动

在此处找到解决方案:

在根目录中创建一个启动shell脚本(我将其命名为“launch”),并使其可执行:

sudo nano launch.sh
我是这样写的:

#!/bin/bash
source /home/pi/env/bin/activate
/home/pi/env/bin/google-assistant-demo
保存文件

编辑LXDE pi自动启动文件

sudo nano /home/pi/.config/lxsession/LXDE-pi/autostart
将此添加到该文件的底部

./launch.sh

重新启动

最后,我采用了以下方法:

以此为基础:–感谢Eric Parisot

但是有一些变化

您需要使用并将其内容提取到
/home/pi/src/

我没有将
gassist.sh
作为
sudo
运行,因为它给了我以下错误:

OpenAlsaHandle PcmOpen: No such file or directory
[7689:7702:ERROR:audio_input_processor.cc(756)] Input error
ON_MUTED_CHANGED:
{‘is_muted’: False}
ON_START_FINISHED
ON_ASSISTANT_ERROR:
{‘is_fatal’: True}
[7689:7704:ERROR:audio_input_processor.cc(756)] Input error
ON_ASSISTANT_ERROR:
{‘is_fatal’: True}
OpenAlsaHandle PcmOpen: No such file or directory
[7689:7702:ERROR:audio_input_processor.cc(756)] Input error
ON_MUTED_CHANGED:
{‘is_muted’: False}
ON_START_FINISHED
ON_ASSISTANT_ERROR:
{‘is_fatal’: True}
[7689:7704:ERROR:audio_input_processor.cc(756)] Input error
ON_ASSISTANT_ERROR:
{‘is_fatal’: True}
修正:不要像sudo那样运行

如果
gassist.sh
给出了关于
RPi.GPIO
的错误,您需要执行以下操作:

然后我做了
sudo nano/etc/profile
,并将其附加到末尾:

#Harvs was here on 24/06/17
if pidof -x "gassist.sh" >/dev/null; then
    echo ""
    echo "/etc/profile says:"
    echo "An instance of Google Assistant is already running, will not start again"
    echo ""
else
    echo "Starting Google Assistant..."
    echo "If you are seeing this, perhaps you have SSH within seconds of reboot"
    /home/pi/src/gassist.sh &
fi
#Harvs was here on 24/06/17
if pidof -x "gassist.sh" >/dev/null; then
    echo ""
    echo "/etc/profile says:"
    echo "An instance of Google Assistant is already running, will not start again"
    echo ""
else
    echo "Starting Google Assistant..."
    echo "If you are seeing this, perhaps you have SSH within seconds of reboot"
    /home/pi/src/gassist.sh &
fi

现在,它可以在虚拟环境中,在引导到CLI模式下完美工作:)

最后我采用了以下方法:

以此为基础:–感谢Eric Parisot

但是有一些变化

您需要使用并将其内容提取到
/home/pi/src/

我没有将
gassist.sh
作为
sudo
运行,因为它给了我以下错误:

OpenAlsaHandle PcmOpen: No such file or directory
[7689:7702:ERROR:audio_input_processor.cc(756)] Input error
ON_MUTED_CHANGED:
{‘is_muted’: False}
ON_START_FINISHED
ON_ASSISTANT_ERROR:
{‘is_fatal’: True}
[7689:7704:ERROR:audio_input_processor.cc(756)] Input error
ON_ASSISTANT_ERROR:
{‘is_fatal’: True}
OpenAlsaHandle PcmOpen: No such file or directory
[7689:7702:ERROR:audio_input_processor.cc(756)] Input error
ON_MUTED_CHANGED:
{‘is_muted’: False}
ON_START_FINISHED
ON_ASSISTANT_ERROR:
{‘is_fatal’: True}
[7689:7704:ERROR:audio_input_processor.cc(756)] Input error
ON_ASSISTANT_ERROR:
{‘is_fatal’: True}
修正:不要像sudo那样运行

如果
gassist.sh
给出了关于
RPi.GPIO
的错误,您需要执行以下操作:

然后我做了
sudo nano/etc/profile
,并将其附加到末尾:

#Harvs was here on 24/06/17
if pidof -x "gassist.sh" >/dev/null; then
    echo ""
    echo "/etc/profile says:"
    echo "An instance of Google Assistant is already running, will not start again"
    echo ""
else
    echo "Starting Google Assistant..."
    echo "If you are seeing this, perhaps you have SSH within seconds of reboot"
    /home/pi/src/gassist.sh &
fi
#Harvs was here on 24/06/17
if pidof -x "gassist.sh" >/dev/null; then
    echo ""
    echo "/etc/profile says:"
    echo "An instance of Google Assistant is already running, will not start again"
    echo ""
else
    echo "Starting Google Assistant..."
    echo "If you are seeing this, perhaps you have SSH within seconds of reboot"
    /home/pi/src/gassist.sh &
fi

现在,它可以在虚拟环境中,在引导到CLI模式下完美工作:)

source/home/pi/env/bin/activate
帮助吗?可能重复的Does
source/home/pi/env/bin/activate
帮助吗?可能重复的Does非常有效,谢谢,比我在其他地方看到的许多复杂解决方案要好得多。一个小的变化是(我认为)你必须chmod+x脚本才能工作!尽管有第一行,它实际上并没有在env中运行脚本,但它仍然可以工作,所以很好!该方法的一个问题是,它在boot-to-CLI模式下不起作用,只在boot-to-gui模式下起作用。另一个在CLI上启动的方法:://youtu.be/ohuszbxuqa4这非常好,谢谢,比我在其他地方看到的许多复杂解决方案要好得多。一个小的变化是(我认为)你必须chmod+x脚本才能工作!尽管有第一行,它实际上并没有在env中运行脚本,但它仍然可以工作,所以很好!该方法的一个问题是,它在引导到CLI模式下无法工作,只能引导到GUI。在CLI上启动另一个方法:://youtu.be/ohUszBxuQA4