web-dev-qa-db-ja.com

インタラクティブなDrushスクリプト

潜在的にがWebサイトのすべてのページに変更を加えるインタラクティブなDrushスクリプトを書きたいのですが。各ページで「Foo」を「Baz」に変更するとします。保存する前に、変更された各ページを確認します。コードは次のようになります。

foreach(website as node) {
  if node->body->value contains "Foo" {
    change "Foo" to "Baz" and display the changed version of body for the user
    Prompt User: Commit change? Yes or No
    if "Yes", save the node
    }
}

Drushは出力をバッファリングしているため、この方法でユーザーと対話できません。これは可能ですか?

3
Greg Sims

Drushには、I/Oを処理するための組み込み関数があります。

Drush <9.xを使用している場合は、手順 drush_confirm() があり、指定されたメッセージへの応答をユーザーに要求します。 9.x +を使用している場合、DrushCommandsクラスを拡張するカスタムコマンドクラスは、SymphonyのCLIコンポーネントで同じことを行う$this->io()->confirmメソッドにアクセスできます。

I/Oの詳細 については、最新のDrushドキュメントを参照してください。

4
Shawn Conn

私は次の Drushでユーザー入力を求める3つの方法 を見つけました。これには解決策が含まれています。

if (drush_confirm('Print \'Hello world\' to the screen?')) {
  drush_print('Hello world!');
}
else {
  drush_user_abort();
}
2
Greg Sims