是否可以在bash脚本中的注释中扩展变量?
我想编写一个脚本以提供给SGE。 qsub
语法允许我使用以#$
开头的bash脚本中的行将其他参数传递给网格引擎。例如,
#$ -q all.q
#$ -S /bin/bash
#$ -V
#$ -m beas
#$ -o run_20120103.out
我想要的是-o
参数动态设置为变量,比如$1
。所以我会天真地写
#$ -o run_${1}.out
但是,由于该行以#
开头,bash会忽略该行,并且不会展开变量$1
。
有什么想法吗?一些bash预处理器?其他一些方式?
编辑我刚才选择了$1
作为示例。它也可以是$FOO
或$BAR
。
答案 0 :(得分:4)
变量扩展发生在shell内存中,它不会影响文件。因此,bash扩展并不重要。
相反,您可以生成要在运行中运行的脚本,并将所有内容扩展到位:
cat << EOF | qsub [options] -
#$ -o run_$1.out
cmds
EOF
答案 1 :(得分: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
拥有自己的参数。它还允许您以编程方式更改其他作业特征,而不仅仅是名称。
答案 2 :(得分:-2)
我也在SGE中使用qsub
命令生成不同的输出或错误日志。例如,如果我想在脚本中包含TASK_ID
,而不是执行
#$ -o run_${TASK_ID}.out
写下它而没有这些技巧会做到这一点:
#$ -o run_$TASK_ID.out