Transformez "gi" en script à la place
par exemple, dans /home/$USER/bin/gi
:
#!/bin/sh
exec /bin/grep -i "[email protected]"
n'oubliez pas de marquer le fichier exécutable.
La suggestion ici est d'éviter les xargs et d'utiliser une boucle "while read" au lieu de xargs :
find -name \*bar\* | while read file; do gi foo "$file"; done
Voir la réponse acceptée dans le lien ci-dessus pour des améliorations pour gérer les espaces ou les retours à la ligne dans les noms de fichiers.
Les alias sont spécifiques au shell - dans ce cas, très probablement spécifiques à bash. Pour exécuter un alias, vous devez exécuter bash, mais les alias ne sont chargés que pour les shells interactifs (plus précisément, .bashrc
ne sera lu que pour un shell interactif).
bash -i exécute un shell interactif (et source .bashrc).bash -c cmd exécute cmd .
Mettez-les ensemble :bash -ic cmd exécute cmd dans un shell interactif, où cmd peut être une fonction/un alias bash défini dans votre .bashrc
.
find -name \*bar\* | xargs bash -ic gi foo
devriez faire ce que vous voulez.
Edit :je vois que vous avez marqué la question comme "tcsh", donc la solution spécifique à bash n'est pas applicable. Avec tcsh, vous n'avez pas besoin du -i
, car il semble lire .tcshrc à moins que vous ne donniez -f
.
Essayez ceci :
find -name \*bar\* | xargs tcsh -c gi foo
Cela a fonctionné pour mes tests de base.