Bash:Scriptception,在脚本中创建脚本

时间:2014-03-16 20:54:32

标签: bash

我如何创建一个脚本来创建两个单独的脚本,其中包含一些内容?

我试过这个但是失败了

#!/bin/bash
cat > scriptMaster.sh << EOF

   cat > script1.sh << EOF
   #code
   EOF

   cat > script2.sh << EOF
   #code
   EOF

EOF

4 个答案:

答案 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"