我在将文件中的字符串作为字符串读入另一个脚本时遇到了麻烦。以下是我的详细信息:
我有 2 个脚本文件:一个是“step0.sh”,另一个是“step1.lsf”
‘step0.sh’文件仅包含两行
DIR="/sc/arion/work/kimm61/vepSIMUL/clinvar"
IN="clinvar.vcf"
并且“step1.lsf”包含以下行:
#!/bin/bash
#BSUB -J step1_1
#BSUB -P acc_Itan_lab
#BSUB -q private
#BSUB -n 41
#BSUB -R rusage[mem=20000]
#BSUB -R span[hosts=1]
#BSUB -W 120:00
#BSUB -o echo $DIR/step1out/%J.stdout
#BSUB -eo echo $DIR/step1out/%J.stderr
#BSUB -L /bin/bash
cd /sc/arion/work/kimm61/vepSIMUL/clinvar/
mkdir step1out
source activate phen
ml bcftools/1.10.2
module load vep/100
source /sc/arion/work/kimm61/vepSIMUL/clinvar/step0.sh
directory=echo "$DIR"
input=echo "$IN"
WRKDIR=echo "$DIR"/step1out
ref_fasta=/sc/arion/projects/Itan_lab/vep_data/fasta_ref/Homo_sapiens.GRCh38.dna.primary_assembly.fa.gz
myinput=echo "$DIR"/"$IN"
myoutput=vep1_1.vcf
(我想要的是)
- 对于“step1.lsf”中的目录,我想从“step0.sh”中读取“DIR”
- 对于来自“step1.lsf”的输入,我想从“step0.sh”读取“IN”
- 对于标准输出(-o)和标准错误输出(-eo),我想从“step0.sh”中读取“DIR”
答案1
正确且最简单的方法是获取设置文件的开头脚本。然后像在脚本。对于 Dash/Sh 您必须使用命令.
,对于 Bash 您可以使用source
或.
。
cat step1.lsf
#!/bin/bash
. step0.sh
echo "$DIR"
echo "$IN"
如果由于某种原因这不是你想要的,你可以从设置文件,通过命令替换捕获输出$()
并将它们分配给脚本。 例如。
cat step1.lsf
#!/bin/bash
DIR="$(sed -nr 's/^DIR="(.*)"$/\1/p' step0.sh)"
IN="$(sed -nr 's/^IN="(.*)"$/\1/p' step0.sh)"
echo "$DIR"
echo "$IN"
- 这是一个解释关于
sed
正在使用的 选项。
实际上,脚本中的问题是这样的分配:
directory=echo "$DIR"
这里需要使用命令替换才能使其工作。
directory="$(echo "$DIR")"
但在这种情况下(您没有以某种特殊方式处理值),您可以将变量的值分配$DIR
给另一个变量。
directory="$DIR"