/ / bash aliasy v xargs: “bash -c” neprechádza argumenty príkazu - linux, bash, xargs

bash aliasov v xargov: "bash -c" nepodáva argumenty príkazu - linux, bash, xargs

Ak chcete rozpoznať aliasy v "xargs", nastavil som alias

alias xargs="xargs bash -ic"

Ak teraz spúšťam tento úryvok, príkazu na xargs nie sú odovzdané žiadne argumenty.

find . -name pom.xml | xargs grep projectid

Infact, ani v tomto prípade nie sú na príkaz odovzdané žiadne argumenty.

bash -ic grep projectid pom.xml

Dokumentácia pre bash hovorí

-c Ak je prítomná voľba -c, potomPríkazy sa čítajú z prvej voľby Argument command_string. Ak existujú argumenty po príkazovom riadku, potom sú priradené k pozičným parametrom, počnúc $ 0.

Takže čo robím zle?

bash --version
GNU bash, version 4.3.39(2)-release (x86_64-unknown-cygwin)

UPDATE:
Vďaka @ knittl pre jeho vstupy. Práca okolo riešenia teraz, aby sa zabránilo všetkým extra interpunkcie v odpovedi @ knittl.
1. Stiahnuť xargs_bash_alias.sh
2. Nastavte alias

alias xargs="<path>/xargs_bash_alias.sh"

Teraz by vaše príkazy xargs rozpoznali vaše ďalšie bash aliasy.

odpovede:

1 pre odpoveď č. 1

Existujú dve veci, ktoré musíte vedieť. Po prvé, správne citovanie:

find . -name pom.xml -print0 | xargs -0 bash -c "grep projectid"

Po druhé, musíte odovzdať svoje pozičné argumenty nejakým spôsobom:

find . -name pom.xml -print0 | xargs -0 bash -c "grep projectid "$@"" -

použitie - ako prvý argument pre bash, takže pozičné argumenty začínajú na $1, rovnako ako v normálnom škrupine.

"$@" rozširuje na citované argumenty pozície od 1. Keďže xargs odovzdáva viacero argumentov naraz, musíte použiť "$@" (citované!) vnútri vášho bash skriptu alebo spustiť xargs s -n1 voľba.