Pourquoi xargs bash -ic echo n'est-il pas la même chose que xargs echo ou xargs?

3

J'attends la commande

ls -d doc/* | grep -P "<some_pattern>" | xargs bash -ic echo

faire la même chose que:

ls -d doc/* | grep -P "<some_pattern>" | xargs echo

c'est-à-dire, pour me donner les fichiers correspondants ls -d doc/* | grep -P "<some_pattern>", uniquement séparés par des espaces au lieu de nouvelles lignes.

Mais je ne reçois qu'une nouvelle ligne en sortie.

Pourquoi est-ce? Comment puis-je corriger la première commande pour faire ce que je veux?

En passant, je me sers de l'utilisation à la zshplace de bash, mais aucun ne fonctionnera.

J'ai en fait besoin de cela pour imprimer un groupe de fichiers dont les noms correspondent au modèle spécifié par "grep" et doivent être imprimés à l'aide d'une .zshrccommande -aliased.

k.stm
la source

Réponses:

4

depuis la page de manuel bash

   -c string If the -c option is present,  then  commands  are  read  from
             string.   If  there  are arguments after the string, they are
             assigned to the positional parameters, starting with $0.

alors...

 $ echo a b c d e f g | xargs bash -ic echo

 $ echo a b c d e f g | xargs bash -ic 'echo $0 $@'
 a b c d e f g
Frostschutz
la source
Cela marche! Grand merci. Il me manquait l’existence de paramètres de position et je ne vis que cette partie des pages de manuel. Ma faute!
k.stm