Como executar a saída de um comando dentro do shell atual?

Eu estou bem ciente dosource (também conhecido como.) utilitário, que pegará o conteúdo de um arquivo e os executará dentro do shell atual.

Agora, estou transformando algum texto em comandos shell e executando-os da seguinte maneira:

$ ls | sed ... | sh

ls é apenas um exemplo aleatório, o texto original pode ser qualquer coisa.sed também, apenas um exemplo para transformar texto. O pouco interessante ésh. Eu canudo tudo o que tenho parash e corre isto.

Meu problema é que isso significa iniciar um novo sub shell. Eu prefiro ter os comandos executados dentro do meu shell atual. Como eu seria capaz de fazer comsource some-file, se eu tivesse os comandos em um arquivo de texto.

Eu não quero criar um arquivo temporário porque parece sujo.

Alternativamente, eu gostaria de começar meu sub shell com exatamente as mesmas características que o meu shell atual.

atualizar

Ok, as soluções que usam backtick certamente funcionam, mas eu geralmente preciso fazer isso enquanto estou verificando e alterando a saída, então prefiro muito mais se houvesse uma maneira de canalizar o resultado em algo no final.

atualização triste

Ah, o/dev/stdin coisa parecia tão bonita, mas, em um caso mais complexo, não funcionou.

Então, eu tenho isso:

find . -type f -iname '*.doc' | ack -v '\.doc

O que garante que todos.doc os arquivos têm sua extensão em minúsculas.

E que, aliás, pode ser tratado comxargs, mas isso é além do ponto.

find . -type f -iname '*.doc' | ack -v '\.doc

Então, quando eu executo o primeiro, ele sai imediatamente, nada acontece.

| perl -pe 's/^((.*)\.doc)$/git mv -f $1 $2.doc/i' | source /dev/stdin

O que garante que todos.doc os arquivos têm sua extensão em minúsculas.

E que, aliás, pode ser tratado comxargs, mas isso é além do ponto.

find . -type f -iname '*.doc' | ack -v '\.doc$' | perl -pe 's/^((.*)\.doc)$/$1 $2.doc/i' | xargs -L1 git mv

Então, quando eu executo o primeiro, ele sai imediatamente, nada acontece.

| perl -pe 's/^((.*)\.doc)$/$1 $2.doc/i' | xargs -L1 git mv

Então, quando eu executo o primeiro, ele sai imediatamente, nada acontece.

| perl -pe 's/^((.*)\.doc)$/git mv -f $1 $2.doc/i' | source /dev/stdin

O que garante que todos.doc os arquivos têm sua extensão em minúsculas.

E que, aliás, pode ser tratado comxargs, mas isso é além do ponto.

find . -type f -iname '*.doc' | ack -v '\.doc$' | perl -pe 's/^((.*)\.doc)$/$1 $2.doc/i' | xargs -L1 git mv

Então, quando eu executo o primeiro, ele sai imediatamente, nada acontece.

questionAnswers(9)

yourAnswerToTheQuestion