Trasforma invece "gi" in uno script
ad esempio, in /home/$USER/bin/gi
:
#!/bin/sh
exec /bin/grep -i "example@unixlinux.online"
non dimenticare di contrassegnare il file come eseguibile.
Il suggerimento qui è di evitare xargs e usare un ciclo "while read" invece di xargs:
find -name \*bar\* | while read file; do gi foo "$file"; done
Vedi la risposta accettata nel link sopra per i perfezionamenti per gestire gli spazi o le nuove righe nei nomi dei file.
Gli alias sono specifici della shell, in questo caso molto probabilmente specifici di bash. Per eseguire un alias, devi eseguire bash, ma gli alias vengono caricati solo per le shell interattive (più precisamente, .bashrc
verrà letto solo per una shell interattiva).
bash -i esegue una shell interattiva (e sorgenti .bashrc).bash -c cmd esegue cmd .
Mettili insieme:bash -ic cmd esegue cmd in una shell interattiva, dove cmd può essere una funzione/alias bash definita nel tuo .bashrc
.
find -name \*bar\* | xargs bash -ic gi foo
dovrebbe fare quello che vuoi.
Modifica:vedo che hai contrassegnato la domanda come "tcsh", quindi la soluzione specifica per bash non è applicabile. Con tcsh, non hai bisogno del -i
, poiché sembra leggere .tcshrc a meno che tu non fornisca -f
.
Prova questo:
find -name \*bar\* | xargs tcsh -c gi foo
Ha funzionato per i miei test di base.