Если вы последуете моему совету, вы не будете использовать "или $ ()
- это немного глупо. bc
- интерактивный строчно-ориентированный интерпретатор. Он читает строку из стандартного ввода, проверяет, нужна ли другая строка на основе только что прочитанного ввода, а затем либо выводит результаты на стандартный вывод, либо запрашивает дополнительную информацию на стандартном вводе. Как и ваша оболочка, он даже откажется делать что-либо, кроме вывода строкового буфера, даже если он записывается не на терминал. Нет никакой необходимости вызывать новый bc
для каждого вычисления - особенно при подстановке команд, которая также включает вызов полностью новой оболочки и выделение нового канала.
Лучше всего организовать совместный процесс.
# in a bash shell
exec 8<> >( : ) 9< <( bc <&8 )
echo 'b=5;++b' >&8
read b <&9
echo "$b"
6
И bc
будет просто продолжать работать - все те значения переменных, которые вы делаете так много, чтобы перемещаться между эфемерными, замененными командами bc
процессами могли быть проще централизованно хранить в центральном bc
.
echo b\*b >&8; read b <&9; echo "$b"
32
И что еще лучше, поскольку я на днях научился это делать, вы можете поместить процесс bc
на сервер сокетов.
{ ncat -l 9000 --allow localhost -k| bc; } <>/dev/fd/1 |:&
И с оболочкой, говорящей на языке / dev / tcp
:
{ echo 'b=10;b' >&0; read b; echo "$b"; } <>/dev/tcp/localhost/9000
10
Это может стать немного громоздким. Я написал небольшую функцию под названием bchat ()
, чтобы упростить задачу.
bchat(){
local IFS=\; ### separate on ;
printf ${1+'%s;"\n"\n';}"$*" ### print \0 if no args
set -- ### init args
while read bchat && ### while read <bc
"${bchat:+set}" -- "$@" "${bchat:=$*}" ### append to args
do :; done 2>/dev/null ### and done
} <>"$BC" >&0 ### $BC must be set
После настройки сервера сокетов, как показано выше, вы можете использовать эту функцию, например:
BC=/dev/tcp/localhost/9000
bchat b=5 x='(b--)' '"x="' ++x '"b="' --b
echo "$bchat"
x=6;b=3
... и снова это состояние будет сохраняться, пока процесс bc будет ...
{{1} }PureOS — это дистрибутив GNU , основанный на Debian, он не имеет не -бесплатного или вкладного репозитория:
These distros are ready-to-use full systems whose developers have made a commitment to follow the Guidelines for Free System Distributions. This means they will include, and propose, exclusively free software. They will reject nonfree applications, nonfree programming platforms, nonfree drivers, nonfree firmware “blobs”, nonfree games, and any other nonfree software, as well as nonfree manuals or documentation.
Для Wi-Fi-карт Realtek и Broadcom требуется non-free
программное обеспечение.
Вам нужна карта Wi-Fi с набором микросхем, который работает с бесплатным программным обеспечением .