ОК в bash, не ОК в sh - convert diff < (ls)

ОК в bash, не ОК в sh - convert diff < (ls)

В GNU Bash diff <(df) <(ls)работает.
В sh, не работает.
Я также пробовал [[diff </bin/df <bin/ls]], все равно ошибка:

$ [[/usr/bin/diff < (/bin/ls) < (bin/df)]]
sh: 1: Syntax error: "(" unexpected
$ bash

кто-нибудь знает эквивалент sh? Очень ценю помощь.

решение1

Прямого эквивалента замене нет <(…) >(…)— вам придется вручную создать именованные каналы в качестве замены:

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

(Также обратите внимание, что в Bash естьнетпробел между <и (…).)

В этом контексте они [[…]]не имеют абсолютно никакого смысла. Они не для группировки команд, а для написания условных выражений (не путайте их с ( )или { }, которые группируют команды). Это также специфичная для Bash функция, но в местах, где она используется правильно, ее можно заменить на [ … ]или на expr.

Связанный контент