9

是否可以在 bash 脚本内的注释中扩展变量?

我想编写一个脚本来输入SGE。该qsub语法允许我使用 bash 脚本中以#$. 例如,

#$ -q all.q
#$ -S /bin/bash
#$ -V
#$ -m beas
#$ -o run_20120103.out

我想要的是-o参数被动态设置为一个变量,比如$1. 所以我会天真地写

#$ -o run_${1}.out

但是,由于该行以 a 开头,因此 bash 会忽略它并且不会扩展#变量。$1

有任何想法吗?一些 bash 预处理器?还有什么办法?

编辑我只是选择了$1一个例子。它也可以是$FOOor $BAR

4

3 回答 3

5

变量扩展发生在 shell 内存中,它不会影响文件。因此,bash 扩展什么并不重要。

相反,您可能可以生成要在运行中运行的脚本,并将所有内容扩展到位:

cat << EOF | qsub [options] -
#$ -o run_$1.out
cmds
EOF
于 2013-02-05T19:13:28.073 回答
0

要比接受的答案更具体一些 SGE,只需重定向标准输出qsub并解析作业 ID。然后,您可以使用它来更改作业名称qalter

这是我用来提交和修改此类作业的脚本示例。

 for a in $args;
 do 
    qsub submission_script $a 1> job.txt
    jid=$(cat job.txt | tr -dc '0-9' | cut -c -6)
    qalter $jid -N $a
 done

我确信有更多惯用的方法可以做到这一点,但这是第一次。

这种方法允许submission_script有它自己的论点。它还允许您以编程方式更改其他工作特征,而不仅仅是名称。

于 2015-11-27T14:23:40.737 回答
-2

我还在qsubSGE 中使用该命令来生成不同的输出或错误日志。例如,如果我想TASK_ID在脚本中包含

#$ -o run_${TASK_ID}.out

不带括号写就可以了:

#$ -o run_$TASK_ID.out
于 2015-12-18T20:56:49.113 回答