在先前发布的文章中介绍了如何通过Bash的HereDoc特性为Bash脚本更加方便地添加帮助信息。Bash语言实现了多种对输入输出的重定向操作,HereDoc便是其中一种,其可以将当前源代码文件中的部分内容作为命令的标准输入,即让命令从当前的脚本文件中读取内容。
当Bash脚本需要依赖外部的小文本文件时,利用这一特性,我们可以将文件整合进Bash脚本。因为这样不再需要保证依赖文件的路径和内容的正确,从而使得脚本部署的过程更加快捷方便。
例如,可以将一段R脚本嵌入到Bash脚本中,从而不需要在新建一个R脚本然后再在Bash脚本中调用。
#!/bin/env bash
# ...
# R脚本运行前的操作
# ...
# 通过HereDoc特性将一小段R脚本嵌入Bash脚本中
# 注意 Rscript 命令后的短横线,这让 Rscript 命令从标准输入流中读取代码并执行
Rscript='/User/balabala/Tools/miniconda3/envs/scAPAtrap/bin/Rscript'
$Rscript - << END
library(scAPAtrap)
options(stringsAsFactors=FALSE)
inputBam="/jdfsbjcas1/Projects/APA/Data/demo.bam"
logf="/jdfsbjcas1/Projects/APA/Logs/demo_scapatrap_notails_onestep.log"
outputDir="/jdfsbjcas1/Projects/APA/Result/Demo"
tools=list(samtools="/User/balabala/Tools/miniconda3/envs/scAPAtrap/bin/samtools",
umitools="/User/balabala/Tools/miniconda3/envs/scAPAtrap/bin/umi_tools",
featureCounts="/User/balabala/Tools/miniconda3/envs/scAPAtrap/bin/featureCounts",
star="/User/balabala/Tools/miniconda3/envs/scAPAtrap/bin/STAR")
scAPAtrap(tools=tools,
trap.params=setTrapParams(),
inputBam=inputBam,
outputDir=outputDir,
logf=logf)
END
# ...
# R脚本运行后的操作
# ...
标签:脚本,妙用,文件,HereDoc,命令,Rscript,Bash
From: https://blog.csdn.net/OMEMSTMATM/article/details/144428662