【问题标题】:Run for loop files with multiple commands, run next file when first command previous file done使用多个命令运行循环文件,当第一个命令前一个文件完成时运行下一个文件
【发布时间】:2018-11-09 11:27:13
【问题描述】:

对于一个项目,我创建了多个 python 脚本,我想在 shell 脚本中的文件目录上运行这些脚本。在这个 shell 脚本中,我已经创建了一个带有多个命令的 for 循环。 第一个命令是一个 python 脚本,它将输入文件与本地数据库进行对比,并占用大部分内核。 下一个命令占用更少的内核,但需要很多时间。 对于每个文件,命令按一系列运行非常重要。 为了节省时间,我想更改 shell 脚本以运行文件的第一个命令,并在完成后在输出上同时运行下一个命令和下一个文件上的第一个命令。

谁能帮我解决这个问题?我试图搜索自己,但我找不到答案。我没有尝试运行这个脚本,因为我已经在运行没有 shell 脚本的 python 脚本。

这是目前为止的脚本:

#!/bin/bash
tsv=/home/user/tsv
fasta=/home/user/fasta/*
clustering=/home/user/clustering

for file in ${fasta}
do
    python blastn_new.py --fasta ${file} --tsv ${tsv}/${file}.tsv &&
    mkdir ${clustering}/${file} &&
    mkdir ${clustering}/${file}/clusters &&
    python blastparsPB.py --clusters ${clustering}/${file}/${file}.txt --fish ${tsv}/${file}.tsv --dir ${clustering}/${file}/clusters/
done

【问题讨论】:

  • 你不能循环使用 glob 来获取文件然后运行吗?
  • 刚开始,bash 对空格非常敏感,因此您的变量定义不会那样工作。它们应该没有空格,例如tsv="/home/user/tsv"。引号不是绝对必要的,因为路径中没有任何空格,但它的风格很好。
  • 命令的顺序有点难以理解,能否提供一些图片或类似 one > two 的东西;三
  • This post on unix exchange 有更多关于非阻塞命令的信息。

标签: python bash shell


【解决方案1】:

您可以在后台运行第二个脚本。

以下还有一些切线的 cmets,并稍微重新格式化您的代码。

#!/bin/bash

# You cannot have spaces around the equals signs
# Also, avoid hard-coding an absolute path
tsv=./tsv
db=./newpacbiodb/pacbiodb
clustering=./clustering

# Notice proper quoting throughout
for file in ./fasta/*
do
    python blastn_new.py \
        --fasta "${file}" \
        --tsv "${tsv}/${file}.tsv" &&
    # mkdir -p creates an entire path if necessary
    # (and works fine even if the directory already exists)
    mkdir -p "${clustering}/${file}/clusters" &&
    python blastparsPB.py \
        --clusters "${clustering}/${file}/${file}.txt" \
        --fish "${tsv}/${file}.tsv" \
        --dir "${clustering}/${file}/clusters/" &
done # notice the simple addition of background ^ job

显然,这假设第二个 Python 脚本不喜欢连接某些东西,例如同时写入数据库,但这已经是给定的了。

【讨论】:

    猜你喜欢
    • 2021-12-14
    • 1970-01-01
    • 1970-01-01
    • 2018-06-29
    • 1970-01-01
    • 1970-01-01
    • 2020-08-08
    • 1970-01-01
    • 2011-06-10
    相关资源
    最近更新 更多