linux - 从 bash 并行运行多个脚本而不将输出打印到控制台

标签 linux bash shell

假设我有多个文件路径可以从终端运行, 我希望它们在后台并行运行,而不将它们的输出打印到控制台屏幕。 (它们的输出应该保存到 python 文件本身定义的其他日志路径中)。

路径格式如下:

/home/Dan/workers/1/run.py  
/home/Dan/workers/2/run.py etc.  

当我尝试做一些事情,比如在后台运行一个 worker 时,它似乎起作用了:
例如:cd/home/Dan/workers/1/python run.py >/dev/null 2>&1 &

ps -ef |grep python 确实显示了在后台运行的脚本而不打印到控制台,而是打印到其预定义的日志路径。

但是,当我尝试通过 bash 脚本启动它们时,我没有在以下代码之后运行 python 脚本:

#!/bin/bash
for path in /home/Dan/workers/*
do
 if [-f path/run.py ]
 then 
  python run.py > /dev/null 2>&1 &
 fi
done

知道有什么区别吗? 在 bash 脚本中,我尝试一个接一个地启动多个脚本,就像我只启动一个脚本一样。

最佳答案

#!/bin/bash
for path in /home/Dan/workers/*
do         # VV    V-added ${}
    if [ -f "${path}/run.py" ]
    then 
        python "${path}/run.py" > /dev/null 2>&1 &
        # or (cd $path; python run.py > /dev/null 2>&1 &) like Terje said
    fi
done
wait

使用 ${path} 而不仅仅是 pathpath 是变量的名称,但您在测试文件时需要的是存储在 path 中的。为此,请使用 $ 作为前缀。请注意,$path 也适用于大多数情况,但如果您使用 ${path},您会更清楚您指的是哪个变量。特别是在学习 bash 时,我建议坚持使用 ${...} 形式。

编辑:将整个名称放在双引号中以防 ${path} 包含任何空格。

关于linux - 从 bash 并行运行多个脚本而不将输出打印到控制台,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39055199/

相关文章:

python - 在带有 os.system 的 bash 命令中使用 Python 变量

validation - 验证 Bash 脚本的参数

linux - 从文件列表变量中删除所有非目录

c++ - sigaction 结构和函数

c - X11编程显示界面

c++ - 加密和解密未显示正确的值

bash - 将命令输出保存在变量上并检查退出状态

linux - 从终端运行 emacs 作为单独的进程

linux - 如何检查用户是否存在于多个服务器的列表中?

bash - 在 bash 中四舍五入到最接近的 2 的幂