Sono ben consapevole dell'utilità source( nota anche come .), che preleverà i contenuti da un file e li eseguirà all'interno della shell corrente.
Ora sto trasformando del testo in comandi di shell e poi li sto eseguendo, come segue:
$ ls | sed ... | sh
lsè solo un esempio casuale, il testo originale può essere qualsiasi cosa. sedanche solo un esempio per trasformare il testo. La parte interessante è sh. Faccio tutto quello che ho she lo fa funzionare.
Il mio problema è che questo significa avviare una nuova sotto shell. Preferisco che i comandi vengano eseguiti all'interno della mia shell corrente. Come sarei in grado di fare con source some-file, se avessi i comandi in un file di testo.
Non voglio creare un file temporaneo perché sembra sporco.
In alternativa, vorrei avviare la mia sub shell con le stesse identiche caratteristiche della mia shell attuale.
aggiornare
Ok, le soluzioni che utilizzano il backtick funzionano sicuramente, ma spesso ho bisogno di farlo mentre controllo e modifico l'output, quindi preferirei di gran lunga se ci fosse un modo per incanalare il risultato in qualcosa alla fine.
triste aggiornamento
Ah, la /dev/stdincosa sembrava così carina, ma, in un caso più complesso, non ha funzionato.
Quindi, ho questo:
find . -type f -iname '*.doc' | ack -v '\.doc$' | perl -pe 's/^((.*)\.doc)$/git mv -f $1 $2.doc/i' | source /dev/stdin
Ciò garantisce che tutti i .docfile abbiano l'estensione in minuscolo.
E che per inciso, può essere gestito xargs, ma questo è oltre il punto.
find . -type f -iname '*.doc' | ack -v '\.doc$' | perl -pe 's/^((.*)\.doc)$/$1 $2.doc/i' | xargs -L1 git mv
Quindi, quando eseguo il primo, uscirà subito, non succede nulla.