web-dev-qa-db-fra.com

Comment créer des scripts qui créent d'autres scripts

J'écris un script qui doit générer un autre script qui sera utilisé pour arrêter un serveur d'applications ...

Voici à quoi ressemble mon code:

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

Mais cela n’a pas été créé correctement, voici à quoi ressemble la sortie stop.sh:

"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

Comme vous le voyez, beaucoup de choses ne vont pas:

  • il n'y a pas de commande echo
  • prend le\n littéralement, donc il n'y a pas de nouvelle ligne

Mes doutes sont:

  • Quelle est la bonne façon de créer un script .sh afin de créer un autre script .sh.
  • Qu'est-ce que tu crois que je fais mal?
2
sfrj

Si vous voulez utiliser echo avec des caractères d'échappement tels que \n, vous devez ajouter le commutateur -e pour echo -e " ... ". Cependant, il peut être plus facile d’utiliser cat avec un ici document à la place

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
3
steeldriver

Supprimer les\n de votre code et le faire simplement a fonctionné pour moi.

#!/bin/bash

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

Résultats en sortie;

Hello World
2
theintern