潜在的にが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は出力をバッファリングしているため、この方法でユーザーと対話できません。これは可能ですか?
Drushには、I/Oを処理するための組み込み関数があります。
Drush <9.xを使用している場合は、手順 drush_confirm()
があり、指定されたメッセージへの応答をユーザーに要求します。 9.x +を使用している場合、DrushCommands
クラスを拡張するカスタムコマンドクラスは、SymphonyのCLIコンポーネントで同じことを行う$this->io()->confirm
メソッドにアクセスできます。
I/Oの詳細 については、最新のDrushドキュメントを参照してください。
私は次の Drushでユーザー入力を求める3つの方法 を見つけました。これには解決策が含まれています。
if (drush_confirm('Print \'Hello world\' to the screen?')) {
drush_print('Hello world!');
}
else {
drush_user_abort();
}