Está bien en bash, no está bien en sh - convierte diff < (ls)

Está bien en bash, no está bien en sh - convierte diff < (ls)

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.

información relacionada