Soy consciente de la utilidad source(también conocida como .), que tomará el contenido de un archivo y lo ejecutará dentro del shell actual.
Ahora, estoy transformando texto en comandos de shell y luego ejecutándolos, de la siguiente manera:
$ ls | sed ... | sh
lses solo un ejemplo aleatorio, el texto original puede ser cualquier cosa. sedtambién, solo un ejemplo para transformar texto. Lo interesante es sh. Canalizo lo que sea que llegue shy lo ejecuta.
Mi problema es que eso significa iniciar un nuevo sub shell. Prefiero que los comandos se ejecuten dentro de mi shell actual. Como podría hacer con source some-file, si tuviera los comandos en un archivo de texto.
No quiero crear un archivo temporal porque se siente sucio.
Alternativamente, me gustaría iniciar mi sub shell con exactamente las mismas características que mi shell actual.
actualizar
Ok, las soluciones que usan comillas invertidas ciertamente funcionan, pero a menudo necesito hacer esto mientras reviso y cambio la salida, así que preferiría si hubiera una manera de canalizar el resultado a algo al final.
triste actualización
Ah, la /dev/stdincosa se veía tan bonita, pero, en un caso más complejo, no funcionó.
Entonces, tengo esto:
find . -type f -iname '*.doc' | ack -v '\.doc$' | perl -pe 's/^((.*)\.doc)$/git mv -f $1 $2.doc/i' | source /dev/stdin
Lo que garantiza que todos los .docarchivos tengan su extensión en minúsculas.
Y que, dicho sea de paso, se puede manejar xargs, pero eso es más allá del punto.
find . -type f -iname '*.doc' | ack -v '\.doc$' | perl -pe 's/^((.*)\.doc)$/$1 $2.doc/i' | xargs -L1 git mv
Entonces, cuando ejecuto el primero, saldrá de inmediato, no pasa nada.