Добавить в канал и передать дальше?

Вы ищете опцию mount -o allow_other. Это позволяет другим пользователям, кроме владельца fuse-процесса, использовать fs (и, следовательно, пользователю вашего smbd тоже).

Если вы не установили user_allow_other в /etc/fuse.conf, вы не сможете использовать эту опцию, если вы не root.

6
23.04.2017, 00:37
3 ответа

Что-то вроде этого работает с использованием xargs:

$ echo "750/12.5" | bc |xargs -I{} echo "{}+20" |bc
80

Или даже:

$ echo "750/12.5" | bc |echo "$(</dev/stdin)+20" |bc
80

А почему бы и нет:

$ bc <<<20+$(bc <<<"750/12.5")
80
5
27.01.2020, 20:23

В простейшем из вариантов это действительно добавляется к конвейерному потоку:

$ echo "750/12.5" | { bc; echo "/24"; }
60
/24

Однако он имеет неожиданную новую строку, чтобы избежать необходимости использовать tr:

$ echo "750/12.5" | { bc | tr -d '\n' ; echo "/24"; }
60/24

Или, учитывая тот факт, что расширение команды удаляет завершающие символы новой строки:

$ printf '%s' $( echo "750/12.5" | bc ); echo "/24"
60/24

Но, вероятно, правильный способ должен быть похож на:

$ echo "$(echo "750/12.5" | bc )/24"
60/24

Который, для использования в bc, можно было бы записать так:

$ bc <<<"$(bc <<<"750/12.5")/24"
2

Который, чтобы получить разумная точность чисел с плавающей запятой должна быть примерно такой:

$ bc <<<"scale=10;$(bc <<<"scale=5;750/12.5")/24"
2.5000000000

Обратите внимание на необходимость двух масштабов, поскольку есть два экземпляра bc.

Конечно, для одного экземпляра bc требуется только одна шкала:

$ bc <<<"scale=5;750/12.5/24"

Фактически, вы должны думать о строке:

$ a=$(echo "750/12.5")        # capture first string.
$ echo "$a/24" | bc           # extend the string
2

Замечание о масштабе сверху по-прежнему актуально.

12
27.01.2020, 20:23

Я добился этого, используя sedи заменив конец строки:

echo "my text" | sed 's/$/ more text/'

Возврат:

my text more text

Ваш пример:

echo "750/12.5" | bc | sed 's/$/\/24/' | bc
26
27.01.2020, 20:23

Теги

Похожие вопросы