Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 有没有一种方法可以同时使用qsub和source?_Bash_Shell_Qsub - Fatal编程技术网

Bash 有没有一种方法可以同时使用qsub和source?

Bash 有没有一种方法可以同时使用qsub和source?,bash,shell,qsub,Bash,Shell,Qsub,我编写了一个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 t

我编写了一个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

但它不是这样工作的。有人能帮忙吗?提前感谢。

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

同样的情况也适用于
qsub
,因为您通过管道调用它:BASH将创建一个新进程
qsub
,并将stdin设置为
source MyProcessing.sh
。它只将这23个字节传递给
qsub
,而不传递其他内容

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


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

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

同样的情况也适用于
qsub
,因为您通过管道调用它:BASH将创建一个新进程
qsub
,并将stdin设置为
source MyProcessing.sh
。它只将这23个字节传递给
qsub
,而不传递其他内容

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

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

使用:

(set; echo "source MyProcessing.sh") | qsub
您需要在
qsub
shell中设置当前变量。

使用:

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

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

qsub用于在网格上执行shell脚本。以前从未听说过。你用什么产品?什么样的网格?@Aarondigula:qsub来自SGE@IgorChubin:什么是SGE?@Aarondigula:SUN Grid Engineqsub用于在网格上执行shell脚本。以前从未听说过。你用什么产品?什么样的网格?@Aarondigula:qsub来自SGE@IgorChubin:什么是SGE?@Aarondigula:太阳栅格引擎