web-dev-qa-db-ja.com

別のスクリプトを作成するスクリプトを作成する方法

私はアプリサーバーをシャットダウンするために使用される別のスクリプトを生成する必要があるスクリプトを書いています...

これは私のコードがどのように見えるかです:

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

しかし、正しく作成されていないため、出力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

ご覧のとおり、多くのことが間違っています。

  • エコーコマンドはありません
  • \ nリテラルを使用しているため、改行はありません

私の疑問は:

  • .shスクリプトを作成して別の.shスクリプトを作成する正しい方法は何ですか。
  • 私が間違っていることは何ですか?
2
sfrj

\nなどのエスケープ文字でエコーを使用する場合は、-eスイッチecho -e " ... "を追加する必要があります。ただし、代わりに here document を使用してcatを使用する方が簡単な場合があります

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

コードから\ nを削除し、これを行うだけでうまくいきました。

#!/bin/bash

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

出力結果。

Hello World
2
theintern