2011-07-08 19 views
5

Próbuję zbudować prosty skrypt wdrażania dla moich aplikacji PHP. Wiem, że istnieje kilka narzędzi do tej pracy (Capistrano, Phing, itp.), Ale wydaje się, że pracują mi na prostą procedurę wdrażania.Wycofywanie ofert przy użyciu SSH

Używam , aby uniknąć wpisywania hasła w kółko. Ale po załadowaniu mojego skompresowanego instalatora, potrzebuję ssh do serwera i uruchomić kilka poleceń. Jednym z nich jest sed. Tak więc cytaty łamią mój scenariusz. To mniej więcej tak:

 
sshpass -p foo ssh [email protected] " 
    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 

" 

Jak widać, używam cudzysłowia, aby rozpocząć moje wypowiedzi SSH, ale również trzeba użyć je na sed.

Wszelkie sugestie będą mile widziane. Dzięki!

Odpowiedz

6

Uciekanie wewnętrznych znaków cudzysłowu jest normalnym sposobem. Czy to nie działa?

sshpass -p foo ssh [email protected] " 
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 

" 
+0

Tak! Działa to idealnie! Dzięki! – fedeisas

2

Czy tu-dokumentem być stosowany zamiast ?:

sshpass -p foo ssh [email protected] <<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 
+0

również, użyj '<<" DATA "' jeśli nie chcesz rozszerzeń zmiennych wewnątrz dokumentu tutaj – sehe

+2

Działa to, ale generuje ostrzeżenie: Pseudo-terminal nie zostanie przydzielony, ponieważ stdin nie jest terminalem. – fedeisas

Powiązane problemy