![ОК в bash, не ОК в sh - convert diff < (ls)](https://rvso.com/image/1606676/%D0%9E%D0%9A%20%D0%B2%20bash%2C%20%D0%BD%D0%B5%20%D0%9E%D0%9A%20%D0%B2%20sh%20-%20convert%20diff%20%3C%20(ls)%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
.