这是我的文件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
答案 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
写为约定。