关于这篇文章如何在bash脚本中包含python脚本,我习惯了使用python HereDoc。但是,我想在for循环中包含那个python HereDoc,因此需要对它进行身份验证,但是Visual似乎无法识别它,从第一个HereDoc的蓝色开始。而且python是空的,因为它还没有编写,但是<#>I想知道是否可以在Bash循环中调用一个HereDoc。
datarange=$(LC_ALL="POSIX" seq -f %.15g 0.5 0.25 5.5 | sed '/\./!s/$/.0/')
for i in $datarange
do
cp -r MovableFiles/mode-1 D$i
cp -r MovableFiles/mode-4 D$i
echo -n CWD:; /bin/pwd
cd $PBS_O_WORKDIR
echo -n CWD:; /bin/pwd
cd D$i
cd mode-1
echo -n CWD:; /bin/pwd
# changes input files for mode-1
python3 - << HERE
HERE
cd mode-4
echo -n CWD:; /bin/pwd
# changes input files for mode-4
python3 - << HERE
HERE
done我想要做的是对"MovableFiles“上的输入文件进行循环,将它们移到目录D$i中,并动态地更改一条特定的行(关于$i号),但是我倾向于在Python3中进行文本更改,所以这就是为什么我需要在循环中使用HereDoc或任何其他方式来使用Python3。
发布于 2021-03-29 20:29:25
您可以在自己的Bash函数中使用本地列-1缩进来声明每个Python代码块。
emitPy_Mode_4 () { cat <<'EOF'
Your python source
goes here with
any indentation you like
Just fine
EOF
}您可以在Bash循环中通过stdin调用它,例如:
emitPy_Mode_4 | python3 -或者是这里的字符串,比如:
python3 - <<<"$( emitPy_Mode_4 )"这里的文档要么完全引用,要么完全不引用(取决于是否引用了<
如果HereDoc被包装在一个函数中,它可以被分割成具有不同引号的部分,以控制扩展。所需变量可以传递到函数中:
emitPy_Mode_4 () { #.. Takes one filename argument.
cat <<'EOF' #.. Preamble
Your python source
EOF
cat <
IIRC,未引用的部分可以包含任何shell结构,比如进程扩展,它可以调用任何其他函数或外部命令将文本注入到HereDoc中。
https://unix.stackexchange.com/questions/642671
复制相似问题