Concatenation (Bash)
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
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