1

在 shell 脚本中进行命令替换时遇到一些问题。我之前在另一个系统上使用过这个脚本,所以不确定这里发生了什么。似乎无论我如何附上设置变量的命令,我都会得到一个空变量。我尝试了许多不同的方法来将它们括起来($()、反引号、引号)。如果有帮助,我正在尝试提交一个数组作业。

#!/bin/bash
#BSUB -q shared
#BSUB -W 23:55
#BSUB -M 51200
#BSUB -J windowCovR1
#BSUB -R "span[hosts=1]"

mem=$LSB_JOBINDEX
sample=`head -n "$mem" bednames.txt | tail -1 | awk '{print $2}'`
eval ${sample}
echo ${sample}

$mem设置正确,与sample线路有关。该echo命令打印一个空行。

4

3 回答 3

0

由于您使用的是$LSB_JOBINDEX,因此您可能需要一个数组作业。作业名称应包含数组的开始和结束参数。例如,

#BSUB -J windowCovR1[1-100]

这假定文件中有 100 个命令行bednames.txt。没有数组边界,$LSB_JOBINDEX将始终为零。 head -n 0将给出空字符串。

我尝试了这个简单的例子,它对我来说没问题。

 [mclosson@host ~]$ cat tmp.sh
 #!/bin/bash
 #BSUB -q normal
 #BSUB -W 23:55
 #BSUB -M 10
 #BSUB -J windowCovR1[1-2]
 #BSUB -R "span[hosts=1]"

 mem=$LSB_JOBINDEX
 echo "$$ mem $mem" >> /tmp/LOG
 sample=`head -n "$mem" bednames.txt | tail -1 | awk '{print $2}'`
 echo "$$ ${sample}" >> /tmp/LOG

 [mclosson@host ~]$ cat bednames.txt
 line11 line12
 line21 line22

 [mclosson@host ~]$ bsub < tmp.sh
 Job <805> is submitted to queue <normal>.

 [mclosson@host ~]$ cat /tmp/LOG
 7979 mem 1
 7979 line12
 7991 mem 2
 7991 line22

另一个小点。如果这不是并行作业,则-R "span[hosts=1]"不需要。

于 2016-07-07T19:39:19.563 回答
0

您“尝试[ing]反引号”的方法似乎不正确。

如果替换的结果为空,那是因为那是变量的值。您是否尝试过调试其输出通过终端设置该变量的命令?

于 2016-07-06T17:31:30.297 回答
-1

您分配样本值的命令是正确的。在命令行上也为我工作。但是,您在 shell 脚本中使用的是相同的。因此,为此尝试使用以下内容:-

样品=head -n "$mem" bednames.txt | tail -1 | awk '{print \$2}'

\ 在 2 美元之前。当您在不使用 \ 的情况下使用时,脚本可能会检查第二个命令行参数。

于 2016-07-06T17:53:25.017 回答