我正在尝试创建一个脚本来创建脚本(并做其他事情)。我的问题是,创建的这些脚本包含环境变量,当实际运行我的脚本时,它们不会出现在脚本中。
#!/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,因此生成的脚本是
#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"?
发布于 2017-08-04 20:20:33
查看此处文档中的变量/表达式,并在编写文件时转义那些您不希望展开的变量/表达式。
在本例中,您希望现在扩展$i,稍后扩展$PBS_O_WORKDIR,因此您可以避开后者:
#!/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发布于 2017-08-04 20:05:19
引用您的本地文档sigil,以防止内容内部发生扩展:
cat >job <<'!'...or...
cat >job <<\!...not...
cat >job <<!https://stackoverflow.com/questions/45514670
复制相似问题