bash
  • shell
  • heroku
  • 2016-09-15 3 views 0 likes 
    0

    リモートデータベースから電子メールでいくつかのレコードを削除するためのbashスクリプトがあります。変数を反復処理して実行する単一のコマンドを作成する方法は?

    for email in "[email protected]"; do 
    heroku pg:psql << EOF 
        DELETE FROM table1 WHERE email='$email'; 
        DELETE FROM table2 WHERE email='$email'; 
        DELETE FROM table2 WHERE email='$email'; 
    EOF 
    done 
    

    とするとき、私はそれを実行し、それは当然のことながら動作しますが、私はHerokuのに複数回接続しています:

    ./scripts/delete-account.sh [email protected] [email protected] 
    ---> Connecting to DATABASE_URL 
    DELETE 0 
    DELETE 0 
    DELETE 0 
    ---> Connecting to DATABASE_URL 
    DELETE 0 
    DELETE 0 
    DELETE 0 
    

    は、まず、このSQL文を作成して、一度にそれを実行する方法はあります?

    私は命令的なアプローチがあり、変数を作成し、ループでそれを修正してからpg:psqlコマンドに渡すことができますが、それを行うには最高の方法ではないと思います。

    答えて

    0

    すべてのSQL文をビルドするスクリプトを使用していないのはなぜですか?それをpsqlコマンドにパイプしますか?

    $cat ./scripts/delete-account.sh 
    (for email in "[email protected]"; do 
        echo "DELETE FROM table1 WHERE email='"$email"';" 
        echo "DELETE FROM table2 WHERE email='"$email"';" 
        echo "DELETE FROM table2 WHERE email='"$email"';" 
    done) | heroku pg:psql 
    

    、その後、としてそれを呼び出す:

    $./scripts/delete-account.sh [email protected] [email protected]

    はまた、引用に気をつけ、シェルが単一引用符

    [email protected];echo '$email'を試してみて、何が起こるかを参照)の内部で補間しません。

    +0

    それのためにただ1つのスクリプトを持つ方が便利です。 – squixy

    +0

    これを行うには編集...それを与える! –

    関連する問題