Como criar scripts que criam outros scripts

2

Estou escrevendo um script que precisa gerar outro script que será usado para desligar um servidor de aplicativos ...

É assim que meu código se parece:

echo "STEP 8: CREATE STOP SCRIPT"
stopScriptContent="echo \"STOPING GLASSFISH PLEASE WAIT...\"\n
cd glassfish4/bin\n
chmod +x asadmin\n
./asadmin stop-domain\n
#In order to work it is required that the original folder of glassfish don't contain already any #project, otherwise, there will be a conflict\n"
${stopScriptContent} > stop.sh
chmod +x stop.sh

Mas não está sendo criado corretamente, é assim que a saída stop.sh se parece com:

"STOPING GLASSFISH PLEASE WAIT..."\n cd glassfish4/bin\n chmod +x asadmin\n ./asadmin stop-domain\n #In order to work it is required that the original folder of glassfish don't contain already any #project, otherwise, there will be a conflict\n

Como você vê, muitas coisas estão erradas:

  • não há comando echo
  • está levando \ n literalmente para que não haja nova linha

Minhas dúvidas são:

  • Qual é a maneira correta de fazer com que um script .sh crie outro script .sh .
  • O que você acha que eu estou fazendo errado?
por sfrj 17.10.2013 / 23:24

2 respostas

3

Se você quiser usar o eco com caracteres de escape como \n , adicione a -e switch echo -e " ... " . No entanto, pode ser mais fácil usar cat com um aqui documento

cat > stop.sh <<EOF
echo "STOPING GLASSFISH PLEASE WAIT..."
cd glassfish4/bin
chmod +x asadmin
./asadmin stop-domain
#In order to work it is required that the original folder of glassfish don't contain already any #project, otherwise, there will be a conflict
EOF
chmod +x stop.sh
    
por steeldriver 17.10.2013 / 23:35
2

Remover \ n's do seu código e simplesmente fazer isso funcionou para mim.

#!/bin/bash

echo "#!/bin/bash
      echo 'Hello World'" > b.sh
bash b.sh

Resultados na saída;

Hello World
    
por theintern 17.10.2013 / 23:31