Anteriormente, usei source
comandos como este:
source file_name
Mas o que estou tentando fazer é o seguinte:
echo something | source
O que não funciona.
Como source
(ou .
) usa um arquivo como argumento, você pode tentar:
source <(echo something)
Seu comando de origem requer um argumento de arquivo. Você pode obter isso em alguns shells com uma substituição de processo, e isso ocorre da mesma maneira que o shell substitui ...
... o
echo
bit lá na linha de comando com a saída do subshell, no caso de substituição de processo, substitui o subshell por um arquivo nomeado - geralmente/dev/fd/62
ou algo assim - algum link para um descritor de arquivo. Com um pipe, o descritor de arquivo é 0, então ......
/dev/stdin
ou qualquer que seja o caso, deve funcionar bem em qualquer sistema Linux - e muitos outros além. Você também pode usar os documentos aqui da mesma forma:Você pode verificar a maneira como seu shell lida com a substituição do processo, a propósito:
... que imprime (in
bash
) :... e assim podemos ver que o shell está fazendo a substituição e
readlink
está lendo de um tubo anômalo que é aberto no descritor de arquivo 63.fonte