在qsub中传递字符串参数

时间:2013-03-16 21:30:06

标签: shell command-line-arguments octave qsub

我有以下名为dump.sh的shell脚本

#!/bin/sh
#$ -cwd
#$ -j y
#module load gcc octave
octave --eval "dumpoct($Nlay, $prefix);"

此脚本加载八度音阶模块,然后计算以下八度音程函数,该函数只显示两个输入参数

function dumpoct(arg1,arg2)
display(arg1)
display(arg2)

当我按如下方式提交shell脚本时,它可以工作(传递两个数字作为参数)

qsub -v Nlay=10,prefix=40 dump.sh

但是当我用一个数字一个字符串参数提交它时如下:

qsub -v Nlay=10,prefix="qwerty" dump.sh

我收到错误

error: `qwerty' undefined near line 0 column 13
error: evaluating argument list element number 2

我也尝试了以下内容,我得到了相同的错误

qsub -v Nlay=10,prefix='qwerty' dump.sh
qsub -v Nlay=10,prefix=qwerty dump.sh

知道我该怎么做吗?

谢谢

Giorgos

1 个答案:

答案 0 :(得分:4)

我认为这是一个bash解释器问题,因为它基本上删除了引号。试试这个:

qsub -v Nlay=10,prefix=\"qwerty\" dump.sh

反斜杠可防止引号被解释为bash解释器的指令。

注意:由于bash本身在dump.sh中使用,它可能无法完全解决问题。您可能还需要自己传递反斜杠...这使得它看起来有点笨重,如下所示:

qsub -v Nlay=10,prefix=\\\"qwerty\\\" dump.sh

然后将在dump.sh中显示为\“qwerty \”,然后由bash解释并作为“qwerty”传递给octave。 不确定是否有更流畅的解决方案。

有一个更流畅的解决方案,虽然只是略有一点。就像这样:

qsub -v Nlay=10,prefix='\"qwerty\"' dump.sh

单引号会使它通过反斜杠,但遗憾的是你不能使用两个单引号 - 它不能正确传递''qwerty'。