@muru Esto funciona muy bien. Tenga en cuenta que "| source / dev / stdin" tiene la apariencia de funcionar, pero en realidad eliminará todas las asignaciones de variables. No estoy seguro de por qué. Parece sólido en teoría. Es una locura.
Dustin Oprea
2
Las tuberías @DustinOprea crean una subshell, por lo que todas esas asignaciones de variables nunca afectan la shell principal.
muru
8
Su comando de origen requiere un argumento de archivo. Puede obtener eso en algunos shells con una sustitución de proceso, y esto se debe a que de la misma manera que el shell reemplaza ...
arg=$(echo hi)
... el echobit allí en la línea de comandos con la salida del subshell, en el caso de la sustitución del proceso, reemplaza el subshell con un archivo con nombre, generalmente /dev/fd/62o algo, algún enlace a un descriptor de archivo. Con una tubería, el descriptor de archivo es 0, así que ...
echo 'echo hi'|./dev/fd/0
... /dev/stdino cualquiera que sea el caso, debería funcionar bien en cualquier sistema Linux, y muchos otros además. También puede usar documentos aquí de manera similar:
./dev/fd/33<<HI
$(echo 'echo hi')
HI
Puede verificar la forma en que su shell maneja la sustitución del proceso, por cierto:
(set-x; readlink <(:))
... que imprime (en bash) :
+set+x
+ readlink /dev/fd/63++:
pipe:[2212581]
... y así podemos ver que el shell está haciendo la sustitución y readlinkestá leyendo desde una tubería anónima que se abre en el descriptor de archivo 63.
Su comando de origen requiere un argumento de archivo. Puede obtener eso en algunos shells con una sustitución de proceso, y esto se debe a que de la misma manera que el shell reemplaza ...
... el
echo
bit allí en la línea de comandos con la salida del subshell, en el caso de la sustitución del proceso, reemplaza el subshell con un archivo con nombre, generalmente/dev/fd/62
o algo, algún enlace a un descriptor de archivo. Con una tubería, el descriptor de archivo es 0, así que ......
/dev/stdin
o cualquiera que sea el caso, debería funcionar bien en cualquier sistema Linux, y muchos otros además. También puede usar documentos aquí de manera similar:Puede verificar la forma en que su shell maneja la sustitución del proceso, por cierto:
... que imprime (en
bash
) :... y así podemos ver que el shell está haciendo la sustitución y
readlink
está leyendo desde una tubería anónima que se abre en el descriptor de archivo 63.fuente