8

PHP アプリ用の簡単なデプロイ スクリプトを作成しようとしています。この作業にはいくつかのツール (Capistrano、Phing など) があることは知っていますが、単純な展開ルーチンの場合、それらは大変な作業のように思えます。

パスワードを何度も入力するのを避けるために、 sshpassを使用しています。しかし、圧縮されたインストーラーをアップロードした後、サーバーに ssh していくつかのコマンドを実行する必要があります。そのうちの 1 つが sed です。だから、引用符は私のスクリプトを壊しています。それは次のようなものです:

sshpass -p foo ssh ユーザー@ホスト "
   cd /www/htdocs/foo/bar
   echo '解凍してインストーラーを削除'
   tar -zxf install.tar.gz

   sed "s/define('環境', '開発');/define('環境', '生産');" index.php > tmp && mv tmp index.php
   sed "s/define('環境', '開発');/define('環境', '生産');/" admin/index.php > tmp && mv tmp admin/index.php

"

ご覧のとおり、二重引用符を使用して SSH ステートメントを開始していますが、sed でも二重引用符を使用する必要があります。

どんな提案でも大歓迎です。ありがとう!

4

2 に答える 2

8

Escaping the internal quote marks is the normal way. Does this not work?

sshpass -p foo ssh user@host "
cd /www/htdocs/foo/bar
echo 'Untar and remove installer'
tar -zxf install.tar.gz

sed \"s/define('ENVIRONMENT', 'development');/define('ENVIRONMENT', 'production');\" index.php > tmp && mv tmp index.php
sed \"s/define('ENVIRONMENT', 'development');/define('ENVIRONMENT', 'production');/\" admin/index.php > tmp && mv tmp admin/index.php

"
于 2011-07-08T08:22:11.863 に答える
2

代わりにヒアドキュメントを使用できますか?:

sshpass -p foo ssh user@host <<DATA
   cd /www/htdocs/foo/bar 
   echo 'Untar and remove installer'
   tar -zxf install.tar.gz

   sed "s/define('ENVIRONMENT', 'development');/define('ENVIRONMENT', 'production');" index.php > tmp && mv tmp index.php
   sed "s/define('ENVIRONMENT', 'development');/define('ENVIRONMENT', 'production');/" admin/index.php > tmp && mv tmp admin/index.php
DATA
于 2011-07-08T08:26:54.090 に答える