![Está bien en bash, no está bien en sh - convierte diff < (ls)](https://rvso.com/image/1606676/Est%C3%A1%20bien%20en%20bash%2C%20no%20est%C3%A1%20bien%20en%20sh%20-%20convierte%20diff%20%3C%20(ls)%20.png)
En GNU Bash, diff <(df) <(ls)
se está ejecutando.
En sh
, no lo es.
También lo intenté [[diff </bin/df <bin/ls]]
, todavía error:
$ [[/usr/bin/diff < (/bin/ls) < (bin/df)]]
sh: 1: Syntax error: "(" unexpected
$ bash
¿Alguien sabe el equivalente sh
? Realmente aprecio la ayuda.
Respuesta1
No existe un equivalente directo a <(…)
>(…)
las sustituciones; deberá crear manualmente canalizaciones con nombre como reemplazo:
mkfifo /tmp/lspipe
mkfifo /tmp/dfpipe
/bin/ls > /tmp/lspipe &
/bin/df > /tmp/dfpipe &
/usr/bin/diff /tmp/lspipe /tmp/dfpipe
rm /tmp/lspipe /tmp/dfpipe
(También tenga en cuenta que en Bash, hayNoespacio entre el <
y el (…)
.)
No tienen [[…]]
absolutamente ningún sentido en este contexto. No son para agrupar comandos, sino para escribir expresiones condicionales (no las confunda con ( )
o { }
que agrupan comandos). También es una característica específica de Bash, pero en lugares donde se usa correctamente, se puede reemplazar con [ … ]
o con expr
.