【问题标题】:pass string argument in qsub在 qsub 中传递字符串参数
【发布时间】:2013-03-17 08:48:12
【问题描述】:

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

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

此脚本加载 octave 模块,然后评估以下 octave 函数,该函数仅显示两个输入参数

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

知道我该怎么做吗?

谢谢

乔戈斯

【问题讨论】:

    标签: shell command-line-arguments octave qsub


    【解决方案1】:

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

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

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

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

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

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

    有一个更时尚的解决方案,虽然只是稍微有点。是这样的:

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

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

    【讨论】:

    • 非常感谢!第一个解决方案有效。其他两个不起作用,因为它们实际上作为函数的输入传递:dumpoct(10, \"qwerty\") 给出八度错误
    猜你喜欢
    • 1970-01-01
    • 2015-03-30
    • 2012-05-29
    • 2014-02-20
    • 2016-01-11
    • 2018-08-05
    • 1970-01-01
    • 2012-03-27
    • 2015-11-04
    相关资源
    最近更新 更多