2

这是我的文件 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
EOF
4

3 回答 3

4

您所谓的“EOF”可以用 Google 搜索为Here Document这里的 Document只能用于提供命令的标准输入。下面的示例在不产生子进程的情况下执行您想要的操作

#!/bin/bash

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

echo $multilineconcat
于 2012-10-12T08:41:25.380 回答
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
)
于 2012-10-12T08:34:11.473 回答
2

不是在等待EOF你的heredoc 吗?

我希望你说

$ mycommand <<EOF
input1
input2
...
EOF

请注意,这EOF不是魔术关键字。它只是一个标记,可以是任何东西(ABC等等)。它表示文件结束,但人们只是EOF按照惯例写。

于 2012-10-12T08:26:56.393 回答