%20.png)
В 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
.