【问题标题】:Is there a way to use qsub and source together?有没有办法同时使用 qsub 和 source ?
【发布时间】:2013-01-25 11:58:30
【问题描述】:

我写了一个shell脚本来分别处理一堆文件,像这样

#!/bin/bash

#set parameters (I have many)
...

#find the files and do iteratively
for File in $FileList; do
    source MyProcessing.sh
done

MyProcessing.sh是调用脚本,调用脚本中使用了主脚本中的变量和函数。

现在我想将我的 shell 脚本移动到集群中,并在迭代中使用 qsub。我试过了

#find the files and do iteratively
for File in $FileList; do
    echo "source MyProcessing.sh" | qsub
done

但它不能以这种方式工作。任何人都可以帮忙吗?提前谢谢你。

【问题讨论】:

  • qsub 用于在网格上执行 shell 脚本。
  • 以前从未听说过。您使用哪种产品?什么样的网格?
  • @AaronDigulla: qsub 来自 SGE
  • @IgorChubin:什么是 SGE?
  • @AaronDigulla:SUN Grid Engine

标签: bash shell qsub


【解决方案1】:

变量和函数是脚本的本地变量。这意味着source MyProcessing.sh 可以工作,但bash MyProcessing.sh 不会。第二种语法创建一个子外壳,这意味着一个新的 Unix 进程和 Unix 进程是隔离的。

qsub 也是如此,因为您通过管道调用它:BASH 将创建一个新进程 qsub 并将标准输入设置为 source MyProcessing.sh。只会将这 23 个字节传递给 qsub,而不是其他任何东西。

如果你想让它工作,那么你必须编写一个 100% 独立于主脚本的新脚本(即它不能使用任何变量或函数)。然后您必须阅读qsub 的文档以了解如何设置它。通常,只有在集群的每个节点上分发了MyProcessing.sh 的副本后,此类工具才会起作用。

此外,该工具可能不会尝试找出脚本需要的其他数据,因此您还必须将文件复制到集群节点(可能通过将它们放在共享文件系统上)。

【讨论】:

    【解决方案2】:

    用途:

    (set; echo "source MyProcessing.sh") | qsub
    

    您需要在qsub shell 中设置当前变量。

    【讨论】:

      猜你喜欢
      • 2020-01-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-08
      • 2019-11-26
      • 2017-03-17
      • 2017-12-10
      • 2023-04-10
      相关资源
      最近更新 更多