首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Bash循环中调用一个HereDoc?

在Bash循环中调用一个HereDoc?
EN

Unix & Linux用户
提问于 2021-03-29 18:00:19
回答 1查看 1K关注 0票数 0

关于这篇文章如何在bash脚本中包含python脚本,我习惯了使用python HereDoc。但是,我想在for循环中包含那个python HereDoc,因此需要对它进行身份验证,但是Visual似乎无法识别它,从第一个HereDoc的蓝色开始。而且python是空的,因为它还没有编写,但是<#>I想知道是否可以在Bash循环中调用一个HereDoc。

代码语言:javascript
复制
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。

EN

回答 1

Unix & Linux用户

发布于 2021-03-29 20:29:25

您可以在自己的Bash函数中使用本地列-1缩进来声明每个Python代码块。

代码语言:javascript
复制
emitPy_Mode_4 () { cat <<'EOF'
Your python source
    goes here with
        any indentation you like
Just fine
EOF
}

您可以在Bash循环中通过stdin调用它,例如:

代码语言:javascript
复制
emitPy_Mode_4 | python3 -

或者是这里的字符串,比如:

代码语言:javascript
复制
python3 - <<<"$( emitPy_Mode_4 )"

这里的文档要么完全引用,要么完全不引用(取决于是否引用了<

如果HereDoc被包装在一个函数中,它可以被分割成具有不同引号的部分,以控制扩展。所需变量可以传递到函数中:

代码语言:javascript
复制
emitPy_Mode_4 () {  #.. Takes one filename argument.
cat <<'EOF'    #.. Preamble
Your python source
EOF
cat <

IIRC,未引用的部分可以包含任何shell结构,比如进程扩展,它可以调用任何其他函数或外部命令将文本注入到HereDoc中。

票数 2
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/642671

复制
相关文章

相似问题

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