bash将EOF重定向到变量

时间:2012-10-12 08:24:28

标签: bash redirect var eof

这是我的文件perl5lib.sh:

export PERL5LIB=`cat |tr '\n' ':'`<<EOF
/home/vul/repository/projects/implatform/daemon/trunk/lib/
/home/vul/repository/projects/platformlib/tool/trunk/cpan_lib
/home/projects/libtrololo

我想以文件

开头
. perl5lib.sh

填充PERL5LIB变量,但它会挂起。怎么了? 我的目标是在文件末尾留下文件夹名称,所以我可以简单地添加新文件:

echo dirname >> myscript

我试过了,export PERL5LIB=$(echo blabla)cat<<EOF都是分开工作,但不是一起工作。

===================解决方案========================== ==

功能诀窍!

function fun
{
     export PERL5LIB=`cat|tr '\n' ':'`
}
fun<<EOF
/dir1/lib
/dir2/lib
/dir3/lib

3 个答案:

答案 0 :(得分:4)

cat在这里毫无用处。在子shell中提供EOF

#! /bin/bash
export PERL5LIB=$(tr '\n' ':'<<EOF
/home/vul/repository/projects/implatform/daemon/trunk/lib/
/home/vul/repository/projects/platformlib/tool/trunk/cpan_lib
/home/projects/libtrololo
EOF
)

答案 1 :(得分:3)

你所谓的“EOF”可以用Google搜索 Here Document 此处文档只能用于提供命令的标准输入。 以下示例执行您想要的操作而不生成子进程

#!/bin/bash

multilineconcat=
while read line; do
  #echo $line
  multilineconcat+=$line
  multilineconcat+=":"
done << EOF
path1
path2
EOF

echo $multilineconcat

答案 2 :(得分:1)

是不是在等待你的heredoc中的EOF

我希望你说

$ mycommand <<EOF
input1
input2
...
EOF

请注意,EOF不是魔术关键字。它只是一个标记,可以是任何东西(ABC等)。它表示文件结束,但人们只是简单地将EOF写为约定。