¿Cómo ejecutar la salida de un comando dentro del shell actual?
Soy muy consciente de lasource
(alias.
) utilidad, que tomará los contenidos de un archivo y los ejecutará dentro del shell actual.
Ahora, estoy transformando un poco de texto en comandos de shell y luego los ejecuto de la siguiente manera:
$ ls | sed ... | sh
ls
Es solo un ejemplo aleatorio, el texto original puede ser cualquier cosa.sed
También, solo un ejemplo para transformar texto. Lo interesante essh
. Yo canalizo lo que tengosh
y 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 si pudiera hacer consource 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 las mismas características que mi shell actual.
actualizarOk, las soluciones que usan Backtick ciertamente funcionan, pero a menudo necesito hacer esto mientras estoy verificando y cambiando la salida, así que preferiría mucho si hubiera una forma de canalizar el resultado en algo al final.
triste actualizaciónAh, la/dev/stdin
La cosa se veía tan bonita, pero, en un caso más complejo, no funcionó.
Entonces, tengo esto:
find . -type f -iname '*.doc' | ack -v '\.docLo que asegura todo.doc
Los archivos tienen su extensión en minúscula.
Y que por cierto, puede ser manejado conxargs
, pero eso no viene al caso.
find . -type f -iname '*.doc' | ack -v '\.docEntonces, cuando ejecuto el primero, saldrá de inmediato, no pasa nada.
| perl -pe 's/^((.*)\.doc)$/git mv -f $1 $2.doc/i' | source /dev/stdin
Lo que asegura todo.doc
Los archivos tienen su extensión en minúscula.
Y que por cierto, puede ser manejado conxargs
, pero eso no viene al caso.
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.
| perl -pe 's/^((.*)\.doc)$/$1 $2.doc/i' | xargs -L1 git mv
Entonces, cuando ejecuto el primero, saldrá de inmediato, no pasa nada.
| perl -pe 's/^((.*)\.doc)$/git mv -f $1 $2.doc/i' | source /dev/stdinLo que asegura todo.doc
Los archivos tienen su extensión en minúscula.
Y que por cierto, puede ser manejado conxargs
, pero eso no viene al caso.
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.