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ď č. 1Existujú 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.