我如何创建一个脚本来创建两个单独的脚本,其中包含一些内容?
我试过这个但是失败了
#!/bin/bash
cat > scriptMaster.sh << EOF
cat > script1.sh << EOF
#code
EOF
cat > script2.sh << EOF
#code
EOF
EOF
答案 0 :(得分:2)
您必须将EOF
标记放在左边距,除非在其前面添加-
,这样可以使用 TAB 字符缩进,但不是空格。你需要在外部和内部的文档中使用不同的EOF标记;否则,标记会在看到之后立即终止外部标记(因为在运行scriptMaster.sh
脚本之前,内部here-docs实际上并未执行)。
#!/bin/bash
cat >scriptMaster.sh <<EOF
#!/bin/bash
cat > script1.sh <<EOF1
#!/bin/bash
#code
EOF1
chmod +x script1.sh # Make the script executable
cat >script2.sh <<EOF2
#!/bin/bash
#code
EOF2
chmod +x script2.sh
EOF
chmod +x scriptMaster.sh
#Now run the scripts:
./scriptMaster.sh
./script1.sh
./script2.sh
答案 1 :(得分:1)
你必须真正执行第一个EOF
内的代码,这对我有用:
#!/bin/bash
cat > scriptMaster.sh << EOF
`cat > script1.sh << EOF2
#code
EOF2
cat > script2.sh << EOF2
#code
EOF2`
EOF
答案 2 :(得分:1)
你的代码的问题在于它是缩进的。不要乱用<<-
和标签来尝试去除缩进,而是不要缩进任何内容并在嵌入式脚本中使用不同的结束标记,这样它们就不会意外地在这里终止你的主文档:
#!/bin/bash
cat > scriptMaster.sh << ENDMASTER
cat > script1.sh << EOF
#code
EOF
cat > script2.sh << EOF
#code
EOF
ENDMASTER
答案 3 :(得分:0)
这是一些老派的东西(概念与上面相同):
echo "=== 001. Create script-01.sh"
sed 's/.//' >script-01.sh <<'//GO.SYSIN DD script-01.sh'
-echo This
-echo is a content
-echo of 'script-01.sh'
//GO.SYSIN DD script-01.sh
chmod +x script-01.sh
echo "=== 002. Create script-02.sh"
sed 's/.//' >script-02.sh <<'//GO.SYSIN DD script-02.sh'
-echo This is a content
-echo of 'script-02.sh'
//GO.SYSIN DD script-02.sh
chmod +x script-02.sh
echo "=== 999. EOF"