2011-07-08 27 views
5

Tôi đang cố gắng xây dựng một kịch bản triển khai đơn giản cho các ứng dụng PHP của mình. Tôi biết có một số công cụ cho công việc này (Capistrano, Phing, vv) nhưng họ có vẻ như rất nhiều công việc cho thói quen triển khai đơn giản của tôi.Báo giá thoát khi sử dụng SSH

Tôi sử dụng sshpass để tránh nhập lại mật khẩu của mình. Nhưng sau khi tải lên trình cài đặt nén của tôi, tôi cần phải ssh vào máy chủ và chạy một số lệnh. Một trong số đó là sed. Vì vậy, dấu ngoặc kép đang phá vỡ kịch bản của tôi. Đó là một cái gì đó như thế này:

 
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 

" 

Như bạn có thể thấy, tôi sử dụng dấu ngoặc kép để bắt đầu báo cáo SSH, nhưng tôi cũng cần sử dụng chúng trên sed.

Mọi đề xuất sẽ được đánh giá rất nhiều. Cảm ơn!

Trả lời

6

Thoát dấu ngoặc kép nội bộ là cách thông thường. Điều này không hoạt động?

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

Có! Điều này chỉ hoạt động hoàn hảo! Cảm ơn! – fedeisas

2

một ở đây-tài liệu có thể được sử dụng thay ?:

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

cũng sử dụng '<<" DATA "' nếu bạn không muốn mở rộng biến trong tài liệu ở đây – sehe

+2

Điều này có tác dụng, nhưng sẽ cảnh báo: Ngõ giả sẽ không được cấp bởi vì stdin không phải là thiết bị đầu cuối. – fedeisas

Các vấn đề liên quan