如何在 CAT << EOF >中读取文件

How can I read a file in cat << EOF >

提问人:Kay 提问时间:4/6/2022 最后编辑:Kay 更新时间:4/6/2022 访问量:1395

问:

我想在 << EOF> 中打印一个文件。例如:

$cat file
ad3
c43
34e
se3
we3

我的脚本是:

$cat run.sh
cat << EOF > test.sh
#!/bin/bash
some commands
cat file #I would like to print the content of the file here
some commands
EOF

我无法随心所欲地打印./run.sh

欲望输出

$cat test.sh
#!/bin/bash
some commands
ad3
c43
34e
se3
we3
some commands
Linux Shell EOF

评论


答:

1赞 Exciter 4/6/2022 #1

我想你正在寻找这样的东西?

cat > test.sh <<EOF
#!/bin/bash
some commands
ad3
c43
34e
se3
we3
some commands
EOF
2赞 wildplasser 4/6/2022 #2

您可以使用反引号,或将文件写入块:


#!/bin/bash

cat <<OMG >zfile
ad3
c43
34e
se3
we3
OMG

# Method1 : backticks

cat << EOF > test.sh
#!/bin/bash
some commands1
`cat zfile`
some commands2
EOF

# Method2: append

cat << EOF1 > test2.sh
#!/bin/bash
some commands1
EOF1

cat zfile >> test2.sh

cat << EOF2 >> test2.sh
some commands2
EOF2

评论

0赞 Kay 4/6/2022
非常好。。我使用方法 2,看起来很手动......但是寻找像方法 1 这样的方法......谢谢
1赞 chepner 4/6/2022
推荐反引号是没有意义的;它们已经过时,只需要在旧的遗留代码中被识别,而不需要在新代码中使用。
1赞 chepner 4/6/2022
请改用。$(...)
0赞 wildplasser 4/6/2022
反引号并没有过时,它们是 bash 仍然支持的 Bourne shell 功能。
2赞 chepner 4/6/2022
“过时”并不意味着“不受支持”。
3赞 Mark Setchell 4/6/2022 #3

您可以使用复合命令:

{ cat << EOF ; cat file ; cat << EOF2; } > test.sh
> start
> EOF
> more
> EOF2

这样可以得到:

start
ad3
c43
34e
se3
we3
more