Concatenation (Bash)

Uit De Vliegende Brigade
Naar navigatie springen Naar zoeken springen

Met concatenation bedoel ik dat de output van het ene commando, kan gebruikt worden als input voor het andere, en vergelijkbare zaken. Misschien dat command chaining een betere naam is.

MIMO & WP-CLI

Deze situatie is iets anders: Het eerste commando geeft namelijk meerdere outputs. Hoe gebruik je dat als input? Ik noem dit hier MIMO - Multiple Input Multiple Output. Deze situatie heeft betrekking op de WordPress Command Line Interface (WP-CLI).

List & delete users

Dit vind ik nog altijd een inspirerende voorbeeld:

wp user delete $(wp user list --role="customer" --field=ID) --yes
  • Het binnenste gedeelte wp user list --role="customer" --field=ID genereert een opsomming van id's, met 1 id per regel
  • Het buitenste gedeelte wp user delete $() --yes neemt die id's als input-argument en verwijdert deze.

Voorbeeld (28 juli 2021):

wp user delete $(wp user list --role="customer" --field=ID) --yes

Success: Removed user 419 from http://en.s1.
Success: Removed user 614 from http://en.s1.
Success: Removed user 830 from http://en.s1.
Success: Removed user 364 from http://en.s1.
Success: Removed user 174 from http://en.s1.
Success: Removed user 341 from http://en.s1.
Success: Removed user 685 from http://en.s1.

Verwijderen van orders?

Bovenstaande aanpak zou ik ook graag willen gebruiken om orders te verwijderen.

De eerste stap lijkt hetzelfde te zijn: Een commando dat output genereert met een item per regel:

wp wc shop_order list --user=4 --field=id

63540
63538
63537
63536

Het buitenste gedeelte heb ik nu ook aan de praat:

wp wc shop_order delete 63540 --user=4

Success: Trashed shop_order 63540

En je mag zelfs de volgorde van de argumenten aanpassen:

wp wc shop_order delete --user=4 63538

Maar dit lukt dan weer niet:

wp wc shop_order delete $(wp wc shop_order list --user=4 --field=id) --user=4

Error: Too many positional arguments: 63537 63536 63534 63533 63532 63531 63527 63525 63524 63522 63521 63515 63507 63504 63503 63502

Uiteindelijk werkt dit wel:

wp wc shop_order list --user=4 --field=id | xargs -n1 wp wc shop_order delete --user=4


Success: Trashed shop_order 63333


Success: Trashed shop_order 63332


Success: Trashed shop_order 63331


Success: Trashed shop_order 63330


Success: Trashed shop_order 63329


Success: Trashed shop_order 63327

Zie ook https://stackoverflow.com/questions/68572623/wp-cli-command-chaining-for-deleting-orders-too-many-positional-arguments-err

Casus: WP-CLI (sep. 2021)

Dit is een variant op het voorbeeld hierboven:

wp --user=4 wc tax list --field=id | xargs -n1 wp --user=4 wc tax delete --force=true 

Bronnen