首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >bash脚本创建脚本变量

bash脚本创建脚本变量
EN

Stack Overflow用户
提问于 2017-08-04 20:02:37
回答 2查看 143关注 0票数 0

我正在尝试创建一个脚本来创建脚本(并做其他事情)。我的问题是,创建的这些脚本包含环境变量,当实际运行我的脚本时,它们不会出现在脚本中。

代码语言:javascript
复制
#!/bin/bash
for i in {001..116}
do
   rm job
   cat > job <<!
#PBS -S /bin/bash
#PBS -N $i-Fe63S
#PBS -j oe
#PBS -q default
#PBS -l nodes=1:ppn=24
#PBS -l walltime=48:00:00
#PBS -V
cd $PBS_O_WORKDIR  
/opt/openmpi/bin/mpirun -np 24 /opt/vasp/5.4/vasp.5.4.1/bin/vasp_std > log
!
   mkdir $i
   cp job $i/
done

在创建的“作业”文件中,它会尝试,但是找不到$PBS_O_WORKDIR,因此生成的脚本是

代码语言:javascript
复制
#PBS -S /bin/bash
#PBS -N 116-Fe63S
#PBS -j oe
#PBS -q default
#PBS -l nodes=1:ppn=24
#PBS -l walltime=48:00:00
#PBS -V

cd

/opt/openmpi/bin/mpirun -np 24 /opt/vasp/5.4/vasp.5.4.1/bin/vasp_std > log

如何修改脚本,以便结果脚本中的行被写成"cd $PBS_O_WORKDIR“而不是"cd"?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-08-04 20:20:33

查看此处文档中的变量/表达式,并在编写文件时转义那些您不希望展开的变量/表达式。

在本例中,您希望现在扩展$i,稍后扩展$PBS_O_WORKDIR,因此您可以避开后者:

代码语言:javascript
复制
#!/bin/bash
for i in {001..116}
do
   rm job
   cat > job <<!
#PBS -S /bin/bash
#PBS -N $i-Fe63S
#PBS -j oe
#PBS -q default
#PBS -l nodes=1:ppn=24
#PBS -l walltime=48:00:00
#PBS -V
cd \$PBS_O_WORKDIR    # <- Escaped
/opt/openmpi/bin/mpirun -np 24 /opt/vasp/5.4/vasp.5.4.1/bin/vasp_std > log
!
   mkdir $i
   cp job $i/
done
票数 1
EN

Stack Overflow用户

发布于 2017-08-04 20:05:19

引用您的本地文档sigil,以防止内容内部发生扩展:

代码语言:javascript
复制
cat >job <<'!'

...or...

代码语言:javascript
复制
cat >job <<\!

...not...

代码语言:javascript
复制
cat >job <<!
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45514670

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档