linux - 如何在 shell 脚本中运行 shell/python 脚本?

标签 linux bash shell

我正在一起测试我的 shell 脚本和 python 脚本,所以我编写了一个 shell 脚本来循环调用这两个脚本,如下所示:

while ((1)) ; do
    /usr/local/bin/ovs-appctl dpdk/vhost-list
    sleep 10
    /usr/local/bin/ovs-appctl dpdk/virtio-net-show n-f879ac2f
    sleep 10
    /usr/local/bin/ovs-appctl dpdk/virtio-net-show n-434ab558
    sleep 10
    /usr/local/bin/ovs-appctl dpdk/virtio-net-show i-brpri-p
    sleep 10
    `sh ./env_check`
    `cat output.txt`
    sleep 10
    `python vm_qga_tool /opt/cloud/workspace/servers/6608da87-e374-4796-adb1-8faa29f49e9a/qga.sock connect:172.16.0.1`
    sleep 10
done

但是结果报错:

test-dpdk-virtio-net-show.sh: line 13: Checking: command not found
test-dpdk-virtio-net-show.sh: line 15: {"session":: command not found

第13行是cat output.txt,第15行是python vm_qga_tool ...

output.txt是第12行sh ./env_check的结果,vm_qga_tool的输出是这样的:

{"session"...

那么如何解决这个问题呢?如何在shell脚本中cat shell脚本的结果?

最佳答案

sh ./env_check 行将替换为脚本 ./env_check 的输出。当前 shell 将尝试将它们作为命令执行。在您的情况下,它失败了,因为幸运的是,bash 无法将它们解释为命令。这可能是一场灾难。例如,如果您的脚本产生类似 rm -rf * 的输出,您可以想象会发生什么。

如果你想显示 ./env_check 的结果,你必须在行前加上 echo,这样 ./env_check 的输出code> 将被馈送到 echo。

echo `sh ./env_check`

或者,如果您想将输出捕获到一个变量中,您可以执行以下操作。

out=`sh ./env_check`

同样适用于 cat ...python ...

但是不鼓励使用反引号。而是使用 $(...)。 ( Read more here. )

...
sleep 10
echo $(sh ./env_check)
echo $(cat output.txt)
sleep 10
echo $(python vm_qga_tool /opt/cloud/workspace/servers/6608da87-e374-4796-adb1-8faa29f49e9a/qga.sock connect:172.16.0.1)
sleep 10
...

但是,无论如何您都不需要执行这些操作。如果不需要捕获命令输出,可以直接调用脚本,而不是通过子shell调用。

...
sleep 10
sh ./env_check
cat output.txt
sleep 10
python vm_qga_tool /opt/cloud/workspace/servers/6608da87-e374-4796-adb1-8faa29f49e9a/qga.sock connect:172.16.0.1
sleep 10
...

关于linux - 如何在 shell 脚本中运行 shell/python 脚本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45450774/

相关文章:

BASH 在脚本中同时使用位置参数和可选参数

bash - AWK - 通过 for 循环和条件检查处理多个文件

bash - 转换行结尾

linux - Shell 脚本 - 这个日期表达式是什么意思

ruby - 一次统计目录中的文件

bash - 有没有办法检查是否使用 -x 标志执行 shell 脚本

c++ - 获取UDP数据包的目的地址

linux - inotify兼容的shell脚本监控某个目录的shell

c++ - 削减依赖性

python - 如何修复 "[rospack] Error: package ' 未找到 my_package'